1.需求:当前系统时间一个月前每天的预警台数
2.现在我写的SQL只会显示出有数据的日期的总条数,求大佬们加个条件
没有条数的日期也显示出来 条数显示为0
SELECT
aed_warn.lasttime,
count( aed_warn.id ) AS number
FROM
aed_warn
LEFT JOIN aed_device ON aed_warn.deviceid = aed_device.id
WHERE
aed_device.setupcity = "深圳市"
AND aed_warn.lasttime BETWEEN ( SELECT DATE_ADD( now( ), INTERVAL - 1 MONTH ) )
AND now( )
GROUP BY
lasttime;
你的意思是不是表中没有日期要构造一个虚拟的日期出来
SELECT d.`date`
FROM
(
SELECT DATE_FORMAT(DATE_ADD( NOW(), INTERVAL -t.help_topic_id DAY ),'%Y-%m-%d') AS 'date'
FROM mysql.help_topic t
WHERE t.help_topic_id<=DATEDIFF(NOW(),DATE_ADD( NOW(), INTERVAL - 1 MONTH ))
) AS d
ORDER BY d.`date`
你可以用这个日期表left join你的业务表
参考:https://www.cnblogs.com/gered/p/11345713.html
不知你表结构和表数据是什么样的,
按你的意思应该是要把 aed_device
表里所有设备都返回,
你可以把 LEFT JOIN
的左右表互换,
如果 aed_warn.deviceid
为 NULL
给个默认值 0 就好
你在as number 那里加个判断,当number为空时取值0就可以了
也即是:
if(count( aed_warn.id ) is null , 0 , count( aed_warn.id )) AS number
希望被采纳谢谢