【问题标题】:How do I get the date from seven days ago?如何获取 7 天前的日期?
【发布时间】:2019-10-29 03:22:42
【问题描述】:

我想制作一个图表,提供上周的数据。

我尝试使用此代码,但它出错了。

where (time_stamp::date > dateadd(day, -7, now()::date))

我也试过

(ud.time_stamp::date between now() and dateadd(day, -7, now()::date))

它给了我这个错误

错误运行查询:指定类型或函数(每个 INFO 一个 消息)在 Redshift 表上不受支持。

【问题讨论】:

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


【解决方案1】:

在 Redshift 中,我会这样写:

where time_stamp >= current_date - interval '6 day'

我怀疑time_stamp 可能用于分区,并且您要小心涉及其上的函数的比较。

【讨论】:

    【解决方案2】:

    你可以试试下面这个选项-

    where (time_stamp::date > NOW() - interval '7 day')
    

    【讨论】:

    • 我不确定 Redshift 是否支持interval 语法。
    • 它的 Postgres 作为标记。
    • Postgres != 红移。 Redshift 是一个相当老的 Postgres 版本的分支。这就是为什么两个数据库的语法并不总是一致的原因。
    • 嗯,但我认为这是一个 Postgres 问题,因为 OP 标记了 Postgres。
    • Amazon Redshift 支持间隔:Interval Literals - Amazon Redshift
    【解决方案3】:

    试试这个版本:

    WHERE time_stamp > DATEADD(day, -7, current_date)
    

    如果您还想将数据的上限限制在今天的午夜(即上周的数据,到今天的午夜结束),您可以使用:

    WHERE time_stamp >= DATEADD(day, -7, current_date) AND time_stamp < current_date
    

    【讨论】:

    【解决方案4】:

    您还没有提到 time_stamp 列的数据类型是什么,但假设它可以转换为 date 那么我认为问题可能是由于您使用了 NOW() 函数在 Redshift 上已弃用。尝试根据the documentation 将其替换为GETDATE() 或SYSDATE。

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多