【问题标题】:How to run a query for every date for last 3 month如何为过去 3 个月的每个日期运行查询
【发布时间】: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 您想在哪个时间执行哪个日期?有什么公式吗?

标签: sql amazon-web-services cron amazon-redshift


【解决方案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进行类型转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      相关资源
      最近更新 更多