可能重复:
MySQL 如何在范围内填充缺失的日期?
我有一个包含以下列的表格:
id
,submitdate
,clicks
.
现在我想从 31 天中检索每天的点击次数。
如果没有特定日期的记录,则应为零。
可能重复:
MySQL 如何在范围内填充缺失的日期?
我有一个包含以下列的表格:
id
,submitdate
,clicks
.现在我想从 31 天中检索每天的点击次数。
如果没有特定日期的记录,则应为零。
尝试这个:
SELECT
DATE(submitdate) 'Day',
SUM(clicks)
FROM Table
WHERE DATEDIFF(NOW(), submitdate) <= 31
GROUP BY DATE(submitdate);
更新:为此,您需要生成从当前日期开始的最后 n 天的列表NOW()
。我为此使用了一个锚表:
CREATE TABLE TEMP
(Digit int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
然后我用它来生成从现在开始的最后 n 天的列表(在演示中我使用了 31 天,但您可以尝试使用任何小于 100 的值,如果您想获得超过 100 的值,则需要再添加CROSS JOIN temp
一个时间)我使用了以下查询:
SELECT
DATE_SUB(NOW(), INTERVAL id DAY) GDay
FROM
(
SELECT t2.digit * 10 + t1.digit + 1 AS id
FROM TEMP AS t1
CROSS JOIN TEMP AS t2
) t WHERE id <= 31;
然后LEFT JOIN
你可以得到最后 31 天,如果没有记录,则为 0:
SELECT
DATE(t2.GDay) 'Day',
SUM(IFNULL(t1.clicks, 0)) 'Count of clicks'
FROM
(
SELECT
DATE_SUB(NOW(), INTERVAL id DAY) GDay
FROM
(
SELECT t2.digit * 10 + t1.digit + 1 AS id
FROM TEMP AS t1
CROSS JOIN TEMP AS t2
) t WHERE id <= 31
) t2
LEFT JOIN Table1 t1 ON DATE(t1.submitdate) = DATE(t2.GDay)
GROUP BY DATE(t2.GDay)
ORDER BY DAY DESC;