我正在尝试选择两个日期范围之间的数据。但是,并非所有数据都每天插入。下面是表格的示例:
mysql> SELECT * FROM attendance;
+------------+-------+
| date | total |
+------------+-------+
| 2012-07-02 | 100 |
| 2012-07-04 | 70 |
| 2012-07-05 | 78 |
+------------+-------+
3 rows in set (0.00 sec)
场景是我想获得从 2012-07-02 到 2012-07-04 的出勤总数。根据上面的数据我会得到
mysql> SELECT * FROM attendance WHERE date BETWEEN '2012-07-02' AND '2012-07-04';
+------------+-------+
| date | total |
+------------+-------+
| 2012-07-02 | 100 |
| 2012-07-04 | 70 |
+------------+-------+
2 rows in set (0.00 sec)
但是我的目标是将 2012-07-03 包含在结果中。
+------------+-------+
| date | total |
+------------+-------+
| 2012-07-02 | 100 |
| 2012-07-03 | 0 |
| 2012-07-04 | 70 |
+------------+-------+
这可以通过 MySQL 完成吗?我确实调查了temporary table .但仍无法达到目的。
最佳答案
您可以将日期枚举为派生伪表(使用 UNION
),然后将其与您的数据连接
SELECT dates.date, COALESCE(attendance.total,0) AS total FROM (
SELECT '2012-07-02' AS date
UNION ALL SELECT '2012-07-03'
UNION ALL SELECT '2012-07-04'
) AS dates
LEFT JOIN attendance USING(date)
编辑:添加了 COALESCE
以在丢失的记录上返回 0
而不是 NULL
。
关于mysql - 使用 MySQL 选择不存在的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11686003/