【问题标题】:Snowflake Query for Latest Snapshot From Bitemporal Data从双时态数据中查询最新快照的雪花
【发布时间】:2022-06-19 02:42:58
【问题描述】:

给定一个包含 bitemporal modeling 的数据表,其中有 2 个日期:(i) 数据适用的日期,以及 (ii) 已知事实的日期时间

City   Temp  Date        As_of_Datetime
———    ———-  ———-        -——————-
Boston 32    2022/07/01  2022/06/28 13:23:00
Boston 31    2022/07/01  2022/06/29 13:23:00
Miami  74    2022/07/01  2022/06/28 13:23:00
Miami  75    2022/07/01  2022/06/29 13:23:00

哪个雪花查询会根据最近的 As_of_Datetime 提供每个日期的最新数据快照?

预期的结果是

City   Temp    Date
Boston 31      2022/07/01
Miami  75      2022/07/01

我尝试使用 last_value 函数

select City, Date, last_value(Temp) over (partition by City, Date order by As_of_Datetime) as Temp
from temperature_table
order by City, Date

但这会产生重复的行,其中重复相同的最后一个值:

Boston   31    2022/07/01
Boston   31    2022/07/01
Miami    75    2022/07/01
Miami    75    2022/07/01

理想情况下,每个 (City, Date) 组合应该只返回 1 行。

提前感谢您的考虑和回复。

【问题讨论】:

    标签: snowflake-cloud-data-platform bi-temporal point-in-time


    【解决方案1】:

    这可以通过使用 QUALIFY 和 ROW_NUMBER 来实现 - 按 City、Date 分区并按 As_of_DateTime 降序排序:

    SELECT *
    FROM tab
    QUALIFY ROW_NUMBER() OVER(PARTITION BY City, Date ORDER BY As_of_DateTime DESC) = 1
    

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多