如何为过去 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 个月的每个日期运行查询的主要内容,如果未能解决你的问题,请参考以下文章