Sql 如何在带有时间戳的雪花中使用LAG函数?

Sql 如何在带有时间戳的雪花中使用LAG函数?,sql,snowflake-cloud-data-platform,lag,Sql,Snowflake Cloud Data Platform,Lag,以下是我的基本表格的构建方式: 我有一些用户使用不同的操作日期作为时间戳(日期、小时、分钟、秒)。用户的操作间隔几天或几小时。我试图通过LAG函数为每个用户找到每个操作之间的间隔。当我将时间戳转换为日期时,我在Snowflake中的查询工作得非常好。当一个用户在同一天有两个动作时,我的时间间隔为=0。我希望看到这个基于分钟(或秒,无所谓)的时间间隔。以下是我在snowflake中使用的当前查询: SELECT USERS, RANK() OVER(PARTITION BY USE

以下是我的基本表格的构建方式:

我有一些用户使用不同的操作日期作为时间戳(日期、小时、分钟、秒)。用户的操作间隔几天或几小时。我试图通过LAG函数为每个用户找到每个操作之间的间隔。当我将时间戳转换为日期时,我在Snowflake中的查询工作得非常好。当一个用户在同一天有两个动作时,我的时间间隔为=0。我希望看到这个基于分钟(或秒,无所谓)的时间间隔。以下是我在snowflake中使用的当前查询:

 SELECT 
    USERS,
  RANK() OVER(PARTITION BY USERS ORDER BY ACTION_DATE ASC) RowNumber,
  CAST(ACTION_DATE AS DATE),
  (CAST(ACTION_DATE AS DATE) - LAG(CAST(ACTION_DATE AS DATE)) OVER (PARTITION BY users ORDER BY ACTION_DATE)) AS TIME_INTERVAL
from TABLE1
ORDER BY 1,2,3;
到目前为止,这个查询在Snowflake中运行得非常好,但是我需要能够用我的时间戳获得这些时间间隔,而不仅仅是用我的时间戳作为日期

我在Snowflake中遇到的错误是:

SQL编译错误:错误行6的位置21处函数“-”的参数类型无效:(TIMESTAMP_NTZ(9),TIMESTAMP_NTZ(9))


有人知道我如何使用带有时间戳的滞后函数,或者我应该使用不同的函数吗?

如果您想要不同,请使用
datediff()
timestampdiff()
。几秒钟:

DATEDIFF(second,
         LAG(ACTION_DATE) OVER (PARTITION BY users ORDER BY ACTION_DATE),
         ACTION_DATE
        ) AS DIFF_SECONDS

您需要使用
timestampdiff
datediff
,因为您不能使用
-
运算符减去两个时间戳。下面是一个可复制的示例,演示如何在几秒钟、几分钟和几小时内完成此操作

创建或替换临时表用户
(
用户varchar,
操作\u日期时间戳\u ntz
);
将覆盖插入到用户中
值('simon','2020-01-01T01:00:00'),
(“西蒙”,“2020-01-01T02:00:00”),
(“西蒙”,“2020-01-02T01:00:00”),
(“西蒙”,“2020-01-02T02:00:00”),
(“西蒙”,“2020-01-03T01:00:00”),
(“西蒙”,“2020-01-04T01:00:00”),
('jen','2020-01-01T01:00:00'),
('jen','2020-01-02T01:00:00'),
('jen','2020-01-03T01:00:00'),
(‘jen’,‘2020-01-04T01:00:00’)
;
挑选
用户作为用户,
行动日期作为行动日期,
排名()超过(按用户划分,按操作顺序,按日期ASC)作为行号,
timestampdiff('minutes',action_date,LAG(action_date)OVER(按用户划分,按action_date排序))作为分钟间隔,
timestampdiff('seconds',action_date,LAG(action_date)OVER(按用户划分,按action_date排序))作为秒间隔,
timestampdiff('hours',action_date,LAG(action_date)OVER(按用户划分,按action_date排序))作为小时间隔
来自用户
按1、2、3顺序排列;
上述结果产生:

+-----+-----------------------------+----------+----------------+----------------+--------------+
|USERS|ACTION_DATE                  |ROW_NUMBER|MINUTES_INTERVAL|SECONDS_INTERVAL|HOURS_INTERVAL|
+-----+-----------------------------+----------+----------------+----------------+--------------+
|jen  |2020-01-01 01:00:00.000000000|1         |NULL            |NULL            |NULL          |
|jen  |2020-01-02 01:00:00.000000000|2         |-1440           |-86400          |-24           |
|jen  |2020-01-03 01:00:00.000000000|3         |-1440           |-86400          |-24           |
|jen  |2020-01-04 01:00:00.000000000|4         |-1440           |-86400          |-24           |
|simon|2020-01-01 01:00:00.000000000|1         |NULL            |NULL            |NULL          |
|simon|2020-01-01 02:00:00.000000000|2         |-60             |-3600           |-1            |
|simon|2020-01-02 01:00:00.000000000|3         |-1380           |-82800          |-23           |
|simon|2020-01-02 02:00:00.000000000|4         |-60             |-3600           |-1            |
|simon|2020-01-03 01:00:00.000000000|5         |-1380           |-82800          |-23           |
|simon|2020-01-04 01:00:00.000000000|6         |-1440           |-86400          |-24           |
+-----+-----------------------------+----------+----------------+----------------+--------------+

非常感谢,它成功了!!!!!!您好@JustineMit-如果答案对您有帮助,请投票并/或接受。听起来不错,谢谢:)