MySQL 查询 - 包括没有记录的日期

标签 mysql jasper-reports

我有一份显示图表的报告。 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/

相关文章:

MySQL - 获取唯一键的每日计数

java - 如何动态更改字体名称?

jasper-reports - 如何显示组数?

jasper-reports - (JasperReports) 将来自不同数据源的数据合并为同一报表行的列

java - 如何使用 JasperReports 导出 CSV

encoding - JasperReports HTML输出中的':'字符

mysql - 高效更新MySql中的多行

mysql - LIKE 查询中的转义字段

mysql - 如何计算表中字符串值按行出现的次数

mysql - SQL:将两列合并为一个查询结果