【问题标题】:dateadd in Redshift not compensating for leap yearRedshift中的dateadd不补偿闰年
【发布时间】:2016-03-23 17:02:23
【问题描述】:

我正在做一个 YoY 自我加入,以便在同一张表中并排查看今年和去年的销售额。

查询看起来像这样:

Select a.date_column, a.sales_column as ty_sales, b.sales_column as ly_sales

from sales_table a

left join sales_table b

on (dateadd(year, -1, a.date_column)) = b.date_column

理论上应该没问题,问题是 2016-02-29 记录正在加入 2015-03-01 记录,这导致 02-2016 的数字关闭。

这是 redshift/postgres 的已知问题吗?

如果我可以提供任何额外的说明,请告诉我。

【问题讨论】:

  • 当它与 mysql、sql 和 postgresql 无关时,你为什么要标记它?
  • 这是一个与 SQL 相关的问题,postgresql 语法是 redshift 的同义词,MySQL 是可见性的同义词。因为如果一个人熟悉 MySQL,他或她很可能熟悉 postgres/redshift。
  • @masdawg 。 . . “sql”标签提供可见性。您应该只标记您实际使用的数据库,而不是无关的数据库。
  • 正式注明。你们对这个问题有任何见解吗?

标签: sql amazon-redshift dateadd


【解决方案1】:

我不会说这是一个“已知问题”,而是他们决定如何处理闰年。当您比较 YoY 的 2/29 时,您想将它与哪一天进行比较?如果您将其与 2/28 进行比较,那么您是否还将今年的 2/28 与去年的 2/28 进行比较?您现在将两天与同一天进行比较。然后,当您总计时,您必须考虑到可能会重复计算去年的销售额。

简而言之,您需要提出非常具体的业务规则,说明您希望在报告时如何处理闰年,然后实施这些规则,鉴于日期函数通常是闰年有点随意(对于任何数据库/语言)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多