如何计算两个连续表行中的时间差
在包含名为“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中文网其他相关文章!