计算连续行之间的时间差
任务是确定包含 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中文网其他相关文章!