如何为过去 3 个月的每个日期运行查询

Posted

技术标签:

【中文标题】如何为过去 3 个月的每个日期运行查询【英文标题】:How to run a query for every date for last 3 month 【发布时间】:2018-11-30 11:32:09 【问题描述】:

我有一个红移表(pkg_date)。我想为过去 3 个月的每个日期获取一些数据。

这是我的查询

select * from pkg_data where scan_date < current_date;

如何在查询本身中使用 current_date 作为变量,并为 4 月 1 日起的每个日期运行此查询。

我设置了一个每小时运行一次的 cron 作业。每小时它应该以不同的 current_date 运行

【问题讨论】:

In every hour it should run with different current_date 您想在哪个时间执行哪个日期?有什么公式吗? 【参考方案1】:

使用dateadd() 获取3 个月前的日期,使用GETDATE() 获取当前日期。

ie 代码将如下所示。

select * from pkg_data where scan_date < dateadd(month,-3,GETDATE());

cron 参考How to execute scheduled SQL script on Amazon Redshift?

【讨论】:

【参考方案2】:
SELECT *
FROM pkg_data
WHERE scan_date > CURRENT_DATE - INTERVAL '3 months'

小心 — Redshift 在 UTC 中工作,因此 CURRENT_DATE 可能会受到时区影响,有时会与您预期的一样。

SELECT
  CURRENT_DATE,
  (CURRENT_DATE - INTERVAL '3 months')::date

返回:

2018-06-21  2018-03-21

还要小心奇怪的月份!

SELECT DATE '2018-05-31' - INTERVAL '3 months'

返回:

2018-02-28 00:00:00

请注意,它给出了该月的最后一天(31 日与 28 日)。

顺便说一句,你可以使用DATE '2018-05-31''2018-05-31'::DATE,也可以使用INTERVAL '3 months''3 months'::INTERVAL进行类型转换。

【讨论】:

以上是关于如何为过去 3 个月的每个日期运行查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中过去 12 个月的日期

最近旅行的乘客

查询近7天,近1个月,近3个月每天的数据量,查询近一年每个月的数据量

前几个月的 SQL 固定日期

Power 查询中基于过去 3 个月的计算列

如何在n个月内使用sql(无程序)获取每个月的第一天和最后一天