sql - 查找 SQL Server 中特定列中的每一行之间的时间差

标签 sql sql-server

仍在学习 SQL,但我正在尝试查看是否有任何客户的时间范围彼此相差 24 小时之内。因此,在此示例中,ID 1 和 4 满足此条件。

CustID Date
1   2018-04-10 11:21:00.000
1   2018-03-05 18:14:00.000
1   2018-03-05 22:53:00.000
2   2018-04-10 11:21:00.000
2   2018-03-27 14:57:00.000
2   2018-04-04 20:00:00.000
3   2018-04-10 11:21:00.000
3   2018-02-10 11:21:00.000
3   2018-04-24 11:29:00.000
4   2018-04-10 11:21:00.000
4   2018-04-10 11:20:00.000
4   2018-04-24 11:29:00.000

我正在考虑做类似的事情

 SELECT CustId
    From Cars c 
    CROSS APPLY(
    SELECT Date 
    FROM Cars 
    Where Date != c.Date)
WHERE Date - c.Date < 24 hours

最佳答案

使用lag():

select distinct custid
from (select c.*,
             lag(c.date) over (partition by c.custid order by c.date) as prev_date
      from cars c
     ) c
where date < dateadd(hour, 24, prev_date);

关于sql - 查找 SQL Server 中特定列中的每一行之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50707616/

相关文章:

sql - 带有选择和值的 Postgres 插入

mysql - SQL选择两列组合的最高行

SQL Server : get date with inparameters year, 周,工作日

sql-server - 如果 SELECT 中的一个或多个链接服务器脱机,则链接服务器 SELECT UNION 结果

mysql - 检索具有 2 列匹配和 1 列不同的行

mysql - 如何根据上个月的计算更新每个月的期初余额?

SQL Server 条件不工作

sql - 旧的 IN 与 Exists 与 Left Join(其中 ___ 为或不为空);表现

sql - 如何避免 SQL 查询中的 DIVIDE BY ZERO 错误

sql - 查找时间戳之间的间隙