代码之家  ›  专栏  ›  技术社区  ›  Umar.H

根据今天的日期排列日期

  •  1
  • Umar.H  · 技术社区  · 3 年前

    我有一个简单的日期维度,

    SELECT [actualDate]
    FROM (
        VALUES ('2021-09-20')
        ,      ('2021-09-21')
        ,      ('2021-09-22')
        ,      ('2021-09-23')
        ,      ('2021-09-24')
        ,      ('2021-09-25')
        ,      ('2021-09-26')
        ,      ('2021-09-27')
        ,      ('2021-09-28')
    ) as t(actualDate)
    

    我正在尝试编写一个窗口函数(运气不好…),以获得以下结果。

    其中1是今天,0是昨天。

    +----------+----------+
    |actualDate|dateOffset|
    +----------+----------+
    |2021-09-20|-4        |
    |2021-09-21|-3        |
    |2021-09-22|-2        |
    |2021-09-23|-1        |
    |2021-09-24|0         |
    |2021-09-25|1         |
    |2021-09-26|2         |
    |2021-09-27|3         |
    |2021-09-28|4         |
    +----------+----------+
    

    1 回复  |  直到 3 年前
        1
  •  3
  •   Tim Biegeleisen    3 年前

    假设日期是连续的,我们甚至不需要分析函数,而是可以使用 DATEDIFF

    SELECT
        actualDate,
        1 + DATEDIFF(day, CAST(GETDATE() AS date), actualDate) dateOffset
    FROM yourTable
    ORDER BY actualDate;
    

    Demo