微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

记录组之间的时间间隔计算

如何解决记录组之间的时间间隔计算

我们有一些机器正在运行,并创建了开始时间和停止时间的运行日志,这些日志渗入了连续的报告中。每次运行包含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 举报,一经查实,本站将立刻删除。