跨记录组的时间间隔计算



我们有机器在运行并创建开始和停止时间的运行日志,这些日志会渗透到连续的报告中。每次跑步包含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%';

就像你问题中的数据一样,这假设数据是完全交错的——所以这是最简单的(或最简单的(解决方案。如果你的数据实际上更复杂,那么我建议你用更好的样本数据再问一个问题。

相关内容

  • 没有找到相关文章

最新更新