分区,引导,左连接。不同行数据time-s之间的差异
partition, lead, left join. difference between different line data time-s
我有关于引擎工作时间的数据。数据包括:
object ID
- 引擎名称
Stop from
- 日期时间格式。引擎停止时创建行。
Start to
- 日期时间格式。
我需要了解引擎每天工作多长时间的信息。为了做到这一点,我需要采取例如:第一个停止记录到(这意味着引擎开始工作)结束从(引擎停止工作的地方)推断出下一行停止
为了这样做,我得出的结论是我必须使用分区前导和左连接。
select
object id,
engine start (stop to) ,
engine stop (alias after joining),
time_difference (datediff between engine start "stop to" and engine stop "stop from" alias)
在我分区之后,每一行都有自己的 ID,我需要将分区行 ID "lead"(或者只是“+1”或“>”)左连接到当前分区行 ID。
这是我设法解决该任务的方法,但我是 sql 的新手,我无法完成该任务。有什么建议吗?
此查询 将相应的 stopfrom
日期追加到每一行:
SELECT
testdata.*,
LEAD(stopfrom, 1, NULL) OVER (PARTITION BY objectid ORDER BY stopto) AS next_stopfrom
FROM testdata
计算时差:
WITH cte AS (
SELECT
testdata.*,
LEAD(stopfrom, 1, NULL) OVER (PARTITION BY objectid ORDER BY stopto) AS next_stopfrom
FROM testdata
)
SELECT cte.*, DATEDIFF(minute, stopto, next_stopfrom)
FROM cte
我有关于引擎工作时间的数据。数据包括:
object ID
- 引擎名称Stop from
- 日期时间格式。引擎停止时创建行。Start to
- 日期时间格式。
我需要了解引擎每天工作多长时间的信息。为了做到这一点,我需要采取例如:第一个停止记录到(这意味着引擎开始工作)结束从(引擎停止工作的地方)推断出下一行停止
为了这样做,我得出的结论是我必须使用分区前导和左连接。
select
object id,
engine start (stop to) ,
engine stop (alias after joining),
time_difference (datediff between engine start "stop to" and engine stop "stop from" alias)
在我分区之后,每一行都有自己的 ID,我需要将分区行 ID "lead"(或者只是“+1”或“>”)左连接到当前分区行 ID。
这是我设法解决该任务的方法,但我是 sql 的新手,我无法完成该任务。有什么建议吗?
此查询 将相应的 stopfrom
日期追加到每一行:
SELECT
testdata.*,
LEAD(stopfrom, 1, NULL) OVER (PARTITION BY objectid ORDER BY stopto) AS next_stopfrom
FROM testdata
计算时差:
WITH cte AS (
SELECT
testdata.*,
LEAD(stopfrom, 1, NULL) OVER (PARTITION BY objectid ORDER BY stopto) AS next_stopfrom
FROM testdata
)
SELECT cte.*, DATEDIFF(minute, stopto, next_stopfrom)
FROM cte