我有以下声明:
SELECT
count(rs.rsc_id) as counter
FROM shots as rs
where rsc_rs_id = 345354
AND YEAR(rs.timestamp) = YEAR(DATE_SUB(CURDATE(), INTERVAL 6 MONTH))
GROUP BY DATE_FORMAT(rs.timestamp,'%Y%m')
rs.timestamp 是 unix 时间戳
输出就像每一行/每个月的数字,如“28”
它工作正常,但如果我有不一致的数据,比如只有过去三个月(不是所有六个月),我的数据库就得不到任何返回。我希望每次没有本月的数据时,返回 0...
有什么建议吗? 我考虑了一些案例陈述,但这似乎不太好......
谢谢!!
最佳答案
只有 6 个月,日期表似乎是不必要的,虽然这看起来很复杂(实际上不是!)
SELECT DATE_FORMAT(N.PivotDate,'%Y%m'), count(rs.rsc_id) as counter
FROM (
select ADDDATE(CURDATE(), INTERVAL N MONTH) PivotDate
FROM (
select 0 N union all
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6) N) N
LEFT JOIN shots as rs
ON rsc_rs_id = 345354
AND DATE_FORMAT(N.PivotDate,'%Y%m')=DATE_FORMAT(FROM_UNIXTIME(rs.timestamp),'%Y%m')
GROUP BY DATE_FORMAT(N.PivotDate,'%Y%m')
关于php - INTERVAL 的 MySQL 查询问题,如果没有提供数据则需要 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350217/