请注意,输出中缺少2017-04-01、2018-02-01、2018-07-01和2019-01-01个月。我只想展示那些失踪的月份。有人知道怎么做吗?
查询:
SELECT TO_DATE("Month", 'mon''yy') as dates FROM sample_sheet
group by dates
order by dates asc;
输出:
2017-01-01
2017-02-01
2017-03-01
2017-05-01
2017-06-01
2017-07-01
2017-08-01
2017-09-01
2017-10-01
2017-11-01
2017-12-01
2018-01-01
2018-03-01
2018-04-01
2018-05-01
2018-06-01
2018-08-01
2018-09-01
2018-10-01
2018-11-01
2018-12-01
2019-02-01
2019-03-01
2019-04-01
2条答案
按热度按时间zpgglvta1#
我不知道vertica,所以我在microsoftsqlserver中编写了一个有效的概念证明,并试图根据在线文档将其转换为vertica语法。
应该是这样的:
months是一个递归动态表,它包含自2017-01年以来的所有月份,以及月份的第一天和最后一天。示例日期只是测试逻辑的日期列表-您应该用自己的表替换它。
一旦你建立了月历表,你所需要做的就是用一个外部查询来对照它检查你的日期,看看哪些日期不在第一个日期和最后一个日期列之间。
vql8enpb2#
您可以构建一个时间序列,包含第一个输入日期和最后一个输入日期之间的所有日期(时间序列的最高粒度是天),并且只过滤掉其中几个月的第一天;然后将创建月份第一个序列的join与您的输入一起左移,以找出join失败的位置,并从join的输入分支检查空值: