如何解决记录组之间的时间间隔计算
我们有一些机器正在运行,并创建了开始时间和停止时间的运行日志,这些日志渗入了连续的报告中。每次运行包含10个时间戳(5个开始和5个停止)。麻烦的是,第(n-1)次运行以开始日期(例如Run_2的第11行)结束,而我需要的停止日期是第n次运行(Run_3的第10行)的一部分。我需要将开始时间和停止时间分成不同的列。
源表的结构是这样的。
Name ROW RUN DATE_TS (this is a timestamp sorted desc)
A 1 Run_3 START1
A 2 Run_3 STOP1
A 3 Run_3 START2
A 4 Run_3 STOP2
A 5 Run_3 START3
A 6 Run_3 STOP3
A 7 Run_3 START4
A 8 Run_3 STOP4
A 9 Run_3 START5
A 10 Run_3 STOP5
A 11 Run_2 START1
A 12 Run_2 STOP1
A 13 Run_2 START2
A 14 Run_2 STOP2
A 15 Run_2 START3
A 16 Run_2 STOP3
A 17 Run_2 START4
A 18 Run_2 STOP4
A 19 Run_2 START5
A 20 Run_2 STOP5
A 21 Run_1 START1
A 22 Run_1 STOP1
A 23 Run_1 START2
A 24 Run_1 STOP2
A 25 Run_1 START3
A 26 Run_1 STOP3
A 27 Run_1 START4
A 28 Run_1 STOP4
A 29 Run_1 START5
A 30 Run_1 STOP5
目标(开始和结束指示与源表中的日期相对应的行ID)
Name Start Stop (replace row_id's with Actual timestamps)
A 3 2
5 4
7 6
9 8
11 10
13 12
15 14
17 16
19 18
21 20
23 22
25 24
27 26
29 28
任何指导都将不胜感激!预先谢谢你。
解决方法
这回答了原始问题。
使用可以使用lag()
:
select t.*
from (select name,row as start,lag(row) over (partition by name order by row) as stop
from t
) t
where name like 'START%';
就像您问题中的数据一样,它假定数据是完全交错的-因此,这是最简单(或最简单)的解决方案。如果您的数据实际上更复杂,那么我建议您再问一个具有更好样本数据的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。