mysql 5.7.12-如何顺序获得两列的差异?

mysql 5.7.12-如何顺序获得两列的差异?,mysql,Mysql,我有一个包含进程ID、开始时间和结束时间的表 pid start end 1 2020-01-01 01:00:00 2020-01-01 02:00:00 1 2020-01-02 01:00:00 2020-01-02 01:30:00 1 2020-01-03 01:00:00 2020-01-03 01:10:00 我需要对此进行一些分析,所以我需要格式中的最后5次运行时间 pid t1 t2 t3 t4 t5 1 10 30 60 我可

我有一个包含进程ID、开始时间和结束时间的表

pid start               end
1   2020-01-01 01:00:00 2020-01-01 02:00:00
1   2020-01-02 01:00:00 2020-01-02 01:30:00
1   2020-01-03 01:00:00 2020-01-03 01:10:00
我需要对此进行一些分析,所以我需要格式中的最后5次运行时间

pid t1 t2 t3 t4 t5
1   10 30 60 

我可以通过减去开始和结束时间戳的最大值来获取最新的运行时间,但如何获取其余时间?

一个选项使用MySQL 8.0中可用的窗口函数和日期算法:

select pid,
    max(case when rn = 1 then timestampdiff(minute, startts, endts) end) t1,
    max(case when rn = 2 then timestampdiff(minute, startts, endts) end) t2,
    max(case when rn = 3 then timestampdiff(minute, startts, endts) end) t3,
    max(case when rn = 4 then timestampdiff(minute, startts, endts) end) t4,
    max(case when rn = 5 then timestampdiff(minute, startts, endts) end) t5 
from (
    select t.*, row_number() over(partition by pid order startts desc, endts desc) rn
    from mytable t
) t
where rn <= 5
group by pid
注:

开始和结束是语言关键字;我在查询中将列重命名为startts和endts

这将最后5次运行定义为STARTT和ENDT最大的运行

这将最新的跑步记录放在第一列,这与您的预期结果略有不同,但对我来说更有意义


表中的主键是什么?@MichalJ.Figurski此表没有主键,它是一个日志表。但是,我将其与另一个表连接,其中pid是主键。存在语法错误:上缺少“右括号”over@hitodo9051:您正在运行哪个版本的MySQL?选择版本可以告诉你。