获取日期序列中所有缺失的日期
Posted
技术标签:
【中文标题】获取日期序列中所有缺失的日期【英文标题】:Get all the missing dates in a sequence of dates 【发布时间】:2016-10-03 21:49:34 【问题描述】:我正在尝试按升序排列日期序列中的所有缺失日期。如何在不使用任何函数或 udfs 的情况下使用简单的 sql 来完成。
Input :-
2016-09-01
2016-09-02
2016-09-05
2016-09-10
输出:-
2016-09-03
2016-09-04
2016-09-06
2016-09-07
2016-09-08
2016-09-09
我尝试了什么?
select start, stop
from
(
select m.x + 1 as start,
(select min(x) - 1 from X as x where x.x > m.x) as stop
from X as m
left outer join X as r
on m.x = r.x - 1
where r.x is null
) as x
where stop is not null;
【问题讨论】:
如果您标记正在使用的 dbms 并显示您的尝试,这将有所帮助。 我正在尝试使用整数解决它,然后跳转到日期。 你的数据库支持递归公用表表达式吗? 支持 CTE 对我来说似乎没有错过日期 【参考方案1】:创建一个新表并插入编号为 1-365 的 365 行 (或者使用已经超过 365 行的表,并使用 rownum 或类似构造来获取唯一整数)
将日期转换为整数(在 Oracle 中使用 TO_CHAR( mydate, 'ddd' )
之类的东西)
在您的查询中将这两个列表连接在一起,以找到合适的集合(重叠、缺失等)
转换回日期
【讨论】:
我正在使用亚马逊红移 @Teja 我不明白 Amazon Redshift 是否支持 cte。 Amazon Redshift 不支持递归 ctes。检查此链接。 docs.aws.amazon.com/redshift/latest/dg/… 这个答案对我没有帮助兰迪:( 好的 - 抱歉 - 这是您用来避免 CTE 的模式 - 您需要另一个包含所有日期的表格来进行比较 - 整数是最好的选择。以上是关于获取日期序列中所有缺失的日期的主要内容,如果未能解决你的问题,请参考以下文章