gpt4 book ai didi

sql - 从重复组中获取时间段的开始

转载 作者:行者123 更新时间:2023-12-02 19:16:25 26 4
gpt4 key购买 nike

id - 操作发生地点的 ID
t - Action 时间

+----+----------+
| id | t |
+----+----------+
| 1 | 12:10:00 |
| 1 | 12:10:05 |
| 1 | 12:11:00 |
| 1 | 13:04:03 |
| 2 | 14:18:05 |
| 2 | 15:00:09 |
| 3 | 17:33:50 |
| 1 | 20:03:14 |
| 1 | 20:03:55 |
| 1 | 20:10:23 |
+----+----------+

目标是获得此输出

+----+----------+
| id | start |
+----+----------+
| 1 | 12:10:00 |
| 2 | 14:18:05 |
| 3 | 17:33:50 |
| 1 | 20:03:14 |
+----+----------+

开始 - id 处第一次操作的时间

具有排名、最小值等的脚本继续使用 id=1
对行进行分组我不知道如何解决这个问题,也没有找到类似的帖子
这是sqlfiddle使用脚本
提前致谢!

最佳答案

这是一个典型的间隙和岛屿问题,您可以使用一些分析函数,例如 ROW_NUMBER() , LAG() , LEAD()等等。大多数情况下,我们考虑通过操作PARTITION来两次应用分析函数。选项,并将一个结果从另一个结果中减去,例如

SELECT DISTINCT tt.ID, FIRST_VALUE(t) OVER W AS start
FROM (SELECT t.*,
ROW_NUMBER() OVER(ORDER BY t)
- ROW_NUMBER() OVER(PARTITION BY ID ORDER BY t) AS rn
FROM (SELECT ID, t FROM records) t) tt WINDOW W AS
(PARTITION BY rn ORDER BY t ROWS
BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
ORDER BY start;

+----+----------+
| id | start |
+----+----------+
| 1 | 12:10:00 |
| 2 | 14:18:05 |
| 3 | 17:33:50 |
| 1 | 20:03:14 |
+----+----------+

Demo

关于sql - 从重复组中获取时间段的开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63654821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com