我正在尝试在两个日期范围之间选择数据.但是并非每天都插入所有数据.以下是该表的样本:
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.但仍然无法实现目标.
解决方法:
这是一个简单解决方案的常见问题.
创建一个常规表,比如REF_DATE,并将所有日期存储在3年或您需要的任何时间范围内.
然后在LEFT OUTER JOIN的左侧使用此表
SELECT REF.date,IFNULL(A.total,0) as total FROM REF_DATE REF
LEFT OUTER JOIN attendance
ON REF.date=A.date
A WHERE REF.date BETWEEN '2012-07-02' AND '2012-07-04';
DATE是MySQL中的关键字,我在这里使用它是为了提高可读性.使用其他列名称.
标签:mysql,select
来源: https://codeday.me/bug/20191003/1848576.html