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

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

Barbara Streisand
Barbara Streisand原创
2024-11-15 06:09:02492浏览

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

如何计算两个连续表行中的时间差

在包含名为“StartDate”的列的表中,通常需要确定相邻记录之间的时间差。一位用户最近在使用 requestId 和 startdate 表时遇到此问题并寻求帮助。

用户提供的表包含如下数据:

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 1 和 2、2 和 3 等)。他们认识到需要自连接,但很难编写适当的 ON 子句。

提供的解决方案利用同一表的两个实例(别名为 A 和 B)之间的 INNER JOIN。 ON 子句指定 B 行中的 requestId 应等于 A 行中的 requestId 加一:

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

此查询成功计算并返回连续行之间请求的时间差。但是,如果 requestId 不连续,则需要另一种方法:

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

在此修改后的查询中,使用 CROSS JOIN 将每一行与表中的每个其他行进行匹配。然后,子查询选择大于当前所选 requestId 的最小 requestId,确保只比较连续的行。

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

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