Teradata查询:-
select min(elapsed_sec) over (partition by job_name, parent_job_name order by elapsed_sec rows between 1 following and 1 following) - elapsed_sec as diff from xyz
Teradata查询的输出:-
elapsed_sec row_count row_no diff
0.000 207 143 1.000
1.000 207 144 0.000
1.000 207 145 0.000
1.000 207 146 0.000
1.000 207 147 4,555.000
4,556.000 207 148 1,250.000
5,806.000 207 149 2,038.000
7,844.000 207 150 73.000
注意:-diff是current_row和next_row
之间的差异。 第一行中的1-0=1,第二行中的1-1=0 MySQL5.6不支持此特性。 请帮助获得期望的结果
您的代码可以在MySQL的最新版本中工作。 所以,我的第一个建议是更新到MySQL8+。
在此之前,有一种方法是相关子查询:
select ( (select min(elapsed_sec)
from xyz xyz2
where xyz2.job_name = xyz.job_name and
xyz2.parent_job_name = xyz.parent_job_name and
xyz2.elapsed_sec > xyz.elapsed_sec
) - elapsed_sec) as diff
from xyz;