mysql 5.7.12-如何顺序获得两列的差异?
我有一个包含进程ID、开始时间和结束时间的表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 我可
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?选择版本可以告诉你。