【问题标题】:Using DATEADD with certain condition在特定条件下使用 DATEADD
【发布时间】:2021-12-06 19:12:04
【问题描述】:

我需要使用 dateadd 函数将某一列中的天数添加到另一列中的某个时间戳。

select number_id,
DATEADD('days',NUM_DAY, MY_DATETIME) as LAST_DATETIME
FROM TBL1
GROUP BY 1

但是,对于每个 number_id,我可能有多个“num_day”。对于每个 number_id,我只想要一条记录,NUM_DAY 应该选择基于最后 add_timestap 插入的 LAST num_day。

有没有办法做到这一点?

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    FIRST_VALUE/LAST_VALUE是你的朋友:

    SELECT number_id,
        LAST_VALUE(num_day) OVER (PARTITION BY number_id ORDER BY added_timestap) AS last_num_day,
        DATEADD('days',last_num_day, my_datedtime) AS last_datetime
    FROM table
    

    但这将获得该行过去/未来的所有行的最后一个值,这可能是您想要的,但如果您想要在所有过去的行和这一行之间,您将需要这个:

    SELECT number_id,
        LAST_VALUE(num_day) OVER (PARTITION BY number_id ORDER BY added_timestap RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS last_num_day,
        DATEADD('days',last_num_day, my_datedtime) AS last_datetime
    FROM table
    

    【讨论】:

      【解决方案2】:

      将“last-edit”-timestamp 添加到表“TBL1”

      num_day last_edit number_id
      42 01.12.2021 10:11:16.0 01
      13 01.12.2021 11:11:16.0 01

      ...并通过子选择获得结果。

      SELECT
        number_id,
        DATEADD('days',NUM_DAY, MY_DATETIME) as LAST_DATETIME
      FROM TBL1
      WHERE 
        number_id = '01' 
        AND last_edit in (
          SELECT
           max(last_edit)
          FROM 
            TBL1
          WHERE
            number_id = '01'
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        相关资源
        最近更新 更多