我有一份显示图表的报告。 X 轴使用来自以下查询的日期。在查询没有返回日期的地方,我得到了差距并且更愿意返回一个值。有什么方法可以强制指定没有记录的日期吗?
SELECT
DATE(instime),
CASE
WHEN direction = 1 AND duration > 0 THEN 'Incoming'
WHEN direction = 2 THEN 'Outgoing'
WHEN direction = 1 AND duration = 0 THEN 'Missed'
END AS type,
COUNT(*)
FROM taxticketitem
GROUP BY
DATE(instime),
CASE
WHEN direction = 1 AND duration > 0 THEN 'Incoming'
WHEN direction = 2 THEN 'Outgoing'
WHEN direction = 1 AND duration = 0 THEN 'Missed'
END
ORDER BY DATE(instime)
最佳答案
一种可能的方法是创建一个日期表,然后用它们LEFT JOIN
您的表。该表可能看起来像这样:
CREATE TABLE `datelist` (
`date` DATE NOT NULL,
PRIMARY KEY (`date`)
);
并填充了介于 2000 年 1 月 1 日到 2050 年 12 月 31 日之间的所有日期(这是我的 Date Generator script )。
接下来,像这样编写您的查询:
SELECT datelist.date, COUNT(taxticketitem.id) AS c
FROM datelist
LEFT JOIN taxticketitem ON datelist.date = DATE(taxticketitem.instime)
WHERE datelist.date BETWEEN `2012-01-01` AND `2012-12-31`
GROUP BY datelist.date
ORDER BY datelist.date
LEFT JOIN
并计算右表中的非空值确保计数正确(如果给定日期不存在行则为 0)。
关于MySQL 查询 - 包括没有记录的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336142/