sql求 当前系统时间一个月前每天的预警台数

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.deviceidNULL 给个默认值 0 就好

你在as number 那里加个判断,当number为空时取值0就可以了
也即是:
if(count( aed_warn.id ) is null , 0 , count( aed_warn.id )) AS number
希望被采纳谢谢