分区,引导,左连接。不同线数据时间的差异-s
Posted
技术标签:
【中文标题】分区,引导,左连接。不同线数据时间的差异-s【英文标题】:partition, lead, left join. difference between different line data time-s 【发布时间】:2018-02-06 07:05:54 【问题描述】:我有关于发动机工作时间的数据。数据包括:
object ID
- 引擎名称
Stop from
- 日期时间格式。引擎停止时创建线路。
Start to
- 日期时间格式。
我需要获取有关引擎每天工作多长时间的信息。为了做到这一点,我需要以 ex: first record of stop to (这意味着引擎开始工作) end 推断下一行停止 (引擎停止工作)
为了做到这一点,我得出一个结论,我必须使用分区前导和左连接。
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)
在 i 分区后,每行将有自己的 ID,需要将分区行 ID“引导”(或只是“+1”或“>”)的位置左连接到当前分区行 ID。
这是我设法解决的任务,但我是 sql 新手,我无法完成任务。有什么建议我该怎么做?
【问题讨论】:
你用的是什么版本的mysql。您还可以将示例数据和预期输出作为文本添加到您的问题中。 其实我在 sql server 上。这是 URL:ibb.co/iWLHDx,这是样本数据 OBJECTID STOPFROM STOPTO OBJ_0004944 5/19/2017 6:00 5/26/2017 11:30 OBJ_0004944 5/27/2017 0:00 5/27/2017 17:00 OBJ_000494 2017 年 6 月 1 日 23:59 2017 年 8 月 30 日 10:28 OBJ_0004944 2017 年 9 月 2 日 10:00 2017 年 9 月 7 日 0:00 OBJ_0005018 2017 年 5 月 3 日 12:00 2017 年 5 月 3 日 22:32 OBJ_0005018 2017 年 5 月 4 日 6:30 2017 年 5 月 17 日 19:15 OBJ_0005018 2017 年 5 月 20 日 21:33 2017 年 5 月 21 日 0:37 OBJ_0005018 2017 年 5 月 21 日 18:00 2017 年 5 月 24 日 4: 00 OBJ_0005018 2017 年 5 月 26 日 21:00 2017 年 5 月 27 日 8:00 OBJ_0005018 2017 年 6 月 5 日 13:00 2017 年 7 月 8 日 16:08 您应该更改标签以删除 mysql 并添加 sqlserver。 mysql和sqlserver不一样,sqlserver中很多有用的特性(对于这个问题)在mysql中是不可用的(比如分区)。 感谢您的建议。我已经改变了标签。 【参考方案1】:这个查询追加对应的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
【讨论】:
经过轻微修改后完美运行。谢谢。以上是关于分区,引导,左连接。不同线数据时间的差异-s的主要内容,如果未能解决你的问题,请参考以下文章