首页 >数据库 >mysql教程 >如何计算SQL表中连续行之间的时间差?

如何计算SQL表中连续行之间的时间差?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-15 12:55:03361浏览

How to Calculate Time Difference Between Consecutive Rows in a SQL Table?

计算连续行之间的时间差

任务是确定包含 StartDate 列的表中连续记录之间的时间差。为了实现这一点,我们可以利用自联接并将每个记录与其表中的后续记录进行比较。

使用自联接:

比较连续的记录记录,我们可以在表上使用自连接。下面是一个示例查询:

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference
FROM MyTable A
INNER JOIN MyTable B ON B.requestid = (A.requestid + 1)
ORDER BY A.requestid ASC;

此查询创建一个连接表,其中每条记录 (A) 与其下一条记录 (B) 配对。计算列 timedifference 给出了两条记录之间的时间差。

处理非连续请求 ID:

如果请求 id 不连续,我们可以使用CROSS JOIN 和附加过滤,将每条记录与其直接后继记录相匹配。

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference
FROM MyTable A
CROSS JOIN MyTable B
WHERE B.requestid IN (SELECT MIN(C.requestid) FROM MyTable C WHERE C.requestid > A.requestid)
ORDER BY A.requestid ASC;

此查询确保每个记录与其直接后继记录匹配,即使请求 ID 不连续也是如此。

示例数据:

考虑由作者:

requestId startdate
1 2011-10-16 13:15:56
2 2011-10-16 13:15:59
3 2011-10-16 13:15:59
4 2011-10-16 13:16:02
5 2011-10-16 13:18:07

输出:

将上述查询应用于示例数据将产生以下输出:

requestId startdate timedifference
1 2011-10-16 13:15:56 NULL
2 2011-10-16 13:15:59 00:00:03
3 2011-10-16 13:15:59 00:00:00
4 2011-10-16 13:16:02 00:00:03
5 2011-10-16 13:18:07 00:02:05

以上是如何计算SQL表中连续行之间的时间差?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn