Sql 如何在带有时间戳的雪花中使用LAG函数?
以下是我的基本表格的构建方式: 我有一些用户使用不同的操作日期作为时间戳(日期、小时、分钟、秒)。用户的操作间隔几天或几小时。我试图通过LAG函数为每个用户找到每个操作之间的间隔。当我将时间戳转换为日期时,我在Snowflake中的查询工作得非常好。当一个用户在同一天有两个动作时,我的时间间隔为=0。我希望看到这个基于分钟(或秒,无所谓)的时间间隔。以下是我在snowflake中使用的当前查询: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
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-如果答案对您有帮助,请投票并/或接受。听起来不错,谢谢:)