sql - 计算两个连续行之间的日期差异

标签 sql sql-server sql-server-2012

我有一个表格,其中包含如下所示的日期时间行。

ID | DateTime

1  | 12:00
2  | 12:02
3  | 12:03
4  | 12:04
5  | 12:05
6  | 12:10

我想识别那些行之间有 5 分钟“间隔”的行(例如,第 5 行和第 6 行)。

我知道我们需要使用DATEDIFF,但是我怎样才能只得到那些彼此连续的行呢?

最佳答案

您可以使用 LAG , LEAD为此的窗口函数:

SELECT ID
FROM (
  SELECT ID, [DateTime], 
         DATEDIFF(mi, LAG([DateTime]) OVER (ORDER BY ID), [DateTime]) AS prev_diff,
         DATEDIFF(mi, [DateTime], LEAD([DateTime]) OVER (ORDER BY ID)) AS next_diff
  FROM mytable) AS t
WHERE prev_diff >= 5 OR next_diff >= 5

输出:

ID
==
5
6

注意:上面的查询假设订单是由ID字段定义的。您可以轻松地将此字段替换为指定表格中顺序的任何其他字段。

关于sql - 计算两个连续行之间的日期差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37270224/

相关文章:

java - 如何将表值参数从java传递到sql server存储过程?

sql - 使用 SQL 加密更新生产数据库 - 批量更新快捷方式?

sql-server - 请确认: SYSDATETIME() is slower than GETDATE() in WHERE clause

sql - 在 SQL 中连接表上的两列

sql - 带有 ALL 运算符的子查询

PHP 减少数据库上的口是心非连接

sql-server - 在本地运行 sqlcmd - 定位服务器时出错

mysql - 在子查询中使用自引用更新行

sql - 根据其他查询的结果运行 Select 查询

sql - 如何在 SQL 中将 json 属性从一个记录值移至新记录值