我想获得在给定日期范围之间的失踪日期 例如
2019-02-01
和2019-01-28
之间的日期
我在这些范围内只有5天。但我想获取所有日期都为空值(如果不存在) 像这样
1,"abc","2019-02-01",
2,"test","2019-2-06",
如果不存在,则显示如下
3,"null","2019,02-02" 4,"null","2019,02-03" 5,"null","2019,02-03",....
,
,
答案 0 :(得分:0)
为了返回结果集中的那些“缺失”日期值,我们需要一个提供它们的行源。也就是说,这些价值必须来自某个地方。行不只是自发地出现在查询中。
一种解决方案是添加一个包含日期值集的“日历”表。
CREATE TABLE `cal` ( `dt` date NOT NULL, PRIMARY KEY (`dt`)) ;
INSERT INTO `cal` (`dt`) VALUES ('2019-02-01'), ('2019-02-02'), ('2019-02-03')
, ('2019-02-04'), ('2019-02-05'), ('2019-02-06')
, ...
然后,我们可以在查询中引用该表。我们可以使用外部联接来获取匹配的行。在没有匹配行的地方,我们仍然从日历表中获取日期
SELECT c.dt AS dt
, t.mycol AS mycol
FROM cal c
LEFT
JOIN mytable t
ON t.dt = c.dt
WHERE c.dt >= '2019-02-01'
AND c.dt < '2019-02-07'
ORDER
BY c.dt
我们不一定需要创建日历表。另一种可能性是在查询内联视图中生成日期集。
但是原理是一样的。我们需要一个行源,当我们在查询的FROM
条款中引用日期时,该行源将返回日期值。