Teradata SQL 前一年同一周同一天

Teradata SQL Same Day Prior Year in same Week

需要帮助弄清楚如何确定日期是否与 teradata 中的今天 'day' 相同。 IE,今天 12/1/15 Tuesday,去年的同一天实际上是 12/2/2014 Tuesday

我尝试使用 current_date - INTERVAL'1'Year 但它 returns 12/1/2014.

下面的 SQL 会让您找到星期几的缩写名称,这很麻烦,但它适用于不同版本的 Teradata。

SELECT CAST(CAST(ADD_MONTHS(CURRENT_DATE, -12) AS DATE FORMAT 'E3') AS CHAR(3)) AS LY_DayOfWeek
     , CAST(CAST(CURRENT_DATE) AS DATE FORMAT 'E3') AS CHAR(3)) AS CY_DayOfWeek

日期在 Teradata 中以整数内部表示为 (Year-1900) * 100000 + (MONTH * 100) + DAY。您也许可以做一些创造性的算术来计算出去年的 12/1/2015 星期二是 12/2/2014 星期二。

如果您可以将当前日期的“星期几”转换为数字,并将前一年的“星期几”转换为数字,则可以通过一些数学运算来完成此操作。

要在 Teradata 中执行此操作,最好的办法是利用 sys_calendar.calendar table。特别是 day_of_week 列。虽然还有other ways要做

此外,最好不要使用 CURRENT_DATE - INTERVAL '1' YEAR,而是使用 ADD_MONTHS(CURRENT_DATE, -12),因为 INTERVAL 算法将在 2012-02-29 和其他 2 月 29 日闰年日期失败。

所以,将它放在一起你就可以得到你需要的东西:

SELECT  
    ADD_MONTHS(CURRENT_DATE, -12)
        +
        (
            (SELECT day_of_week FROM sys_calendar.calendar WHERE calendar_date = CURRENT_DATE)
            -
            (SELECT day_of_week FROM sys_calendar.calendar WHERE calendar_date = ADD_MONTHS(CURRENT_DATE, -12))
        )

这基本上是说:用当前日期的星期几 (3) 减去去年的星期几 (2) 得到 1。将其添加到去年的日期,您将得到一周中与当前日期相同的一天。

我在 01/01/2010CURRENT_DATE 之间的所有日期测试了这个并且它按预期工作。

你为什么不简单地减去 52 周?

current_date - 364