sql - 如何在带有 TIMESTAMPS 的 Snowflake 中使用 LAG FUNCTION?
问题描述
这是我的基本表的构建方式:
我的用户有各种行动日期作为时间戳(日期、小时、分钟、秒)。用户的操作要么相隔几天,要么相隔几个小时。我正在尝试使用 LAG 功能查找每个用户的每个操作之间的间隔。当我将时间戳转换为 DATES 时,我在 Snowflake 中的查询工作得非常好。当用户在同一天有 2 个操作时,我的时间间隔是 = 0。我想根据分钟(或秒,没关系)查看这个时间间隔。这是我在雪花中使用的当前查询:
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 中运行得非常好,但我需要能够使用我的时间戳获取这些时间间隔,而不仅仅是将我的时间戳转换为日期。
我在雪花中遇到的错误是:
SQL 编译错误:位置 21 处的错误行 6 函数“-”的参数类型无效:(TIMESTAMP_NTZ(9), TIMESTAMP_NTZ(9))
有谁知道我如何使用带有时间戳的 LAG FUNCTION 或者我应该使用不同的函数?
解决方案
如果您想要区别,请使用datediff()
or timestampdiff()
。几秒钟:
DATEDIFF(second,
LAG(ACTION_DATE) OVER (PARTITION BY users ORDER BY ACTION_DATE),
ACTION_DATE
) AS DIFF_SECONDS
推荐阅读
- angular - Ngclass 没有更新 UI 中的类
- azure - 云'AzureCloud'中不存在xxx'的订阅
- reactjs - 如何使用 React 中的按钮传递 ID?
- gcc - GCC - 手动切换每个指令集而不使用 March 一次切换多个指令集?
- python - 在远程节点执行 bash 脚本并从服务器通过 python 控制
- awk - 使用 Awk 对文本文件进行重复数据删除,但保留非空字段的行
- python - 图形实现问题是 Python
- javascript - 当它深深嵌套在 JavaScript 中时,如何将整个对象作为输出?
- google-chrome - 如何使用 Puppeteer API 呈现特殊字符
- c# - 如何根据窗口大小调整元素大小