【问题标题】:Snowflake SQL error - Invalid argument types for function '-': (TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))Snowflake SQL 错误 - 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))
【发布时间】:2019-10-07 19:42:22
【问题描述】:

当我尝试减去时间戳并执行窗口函数(leadlagpartition by)时出现此错误:

函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))

试过date_diff,但不能和窗口函数一起工作

SELECT 
   user_id,
   event,
   received_at,
   received_at - LAG( received_at,1) OVER (PARTITION BY user_id ORDER BY received_at) AS last_event
FROM 
   segment_javascript.help_center_opened

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    您不能通过仅减去两个日期来获得数字来执行“Oracle 方式”,您必须使用具有度量单位/比例的 diff 函数,例如:

    SELECT 
       ts, 
       TIMESTAMPDIFF(MILLISECONDS, LAG(ts, 1) OVER (ORDER BY ts), ts) tsd
    FROM 
       (VALUES (CURRENT_TIMESTAMP), (DATEADD(DAY, 1, CURRENT_TIMESTAMP))) v(ts);
    

    【讨论】:

    【解决方案2】:

    我想您需要计算相同 user_id 与上次事件接收时间的时差。

    如果是这样,我认为这会起作用:

    SELECT 
       user_id,
       event,
       received_at,
       DATEDIFF(
         MINUTE, -- or any other supported date/time part
         received_at, -- start time 
         LAG( received_at,1) OVER (PARTITION BY user_id ORDER BY received_at) -- end time
         ) AS last_event
    FROM 
       segment_javascript.help_center_opened
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-17
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      相关资源
      最近更新 更多