sql里面查询一个礼拜的数据,如果查询不到。默认填0.怎么用sql实现
程序员文章站
2022-04-01 10:25:28
...
SELECT date_tables.dates as name, IFNULL(temps.totalNum,0) AS totalNum
FROM (
SELECT DATE_FORMAT(m.date_str,'%m.%d') name, ROUND(SUM(m.mileage)/1000) AS totalNum
FROM iot_device_miliage m
WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(m.date_str) AND m.date_str!= DATE_FORMAT(NOW(),'%Y-%m-%d')
GROUP BY DATE_FORMAT(m.date_str,'%m.%d')
)
temps
RIGHT JOIN (
SELECT @s :[email protected] + 1 AS indexs, DATE_FORMAT(DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)),'%m.%d') AS dates
FROM mysql.help_topic,(
SELECT @s := 0) temp
WHERE @s < 7
ORDER BY dates
) date_tables ON date_tables.dates=temps.name
实现方案是先查询进一个礼拜的数据,然后在关联起来,如果没有数据,就赋值0
SELECT @s :[email protected] + 1 AS indexs, DATE_FORMAT(DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)),'%m.%d') AS dates
FROM mysql.help_topic,(
SELECT @s := 0) temp
WHERE @s < 7
ORDER BY dates
这个是查询一个礼拜的数据,我们的要求是不包含当天的数据
如果需要包含当天,只要把SELECT @s :=-1) temp
WHERE @s <6 就可以查询包含当天的一个礼拜的数据
返回的数据就是