Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中查找特定列中每行之间的时间差_Sql_Sql Server - Fatal编程技术网

在SQL Server中查找特定列中每行之间的时间差

在SQL Server中查找特定列中每行之间的时间差,sql,sql-server,Sql,Sql Server,仍在学习SQL,但我正在尝试查看是否有客户的时间范围在24小时之内。所以在这个例子中,ID1和ID4符合这个标准 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-1

仍在学习SQL,但我正在尝试查看是否有客户的时间范围在24小时之内。所以在这个例子中,ID1和ID4符合这个标准

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

这个答案基于sql server,但您应该能够根据需要进行翻译。我还假设您有一个要求,即两个客户之间的相同日期时间不能相同。如果这是错误的假设,请删除where子句。一个简单的自连接应该可以让你达到目的

declare @t table (id int, dt datetime)

insert into @t values ('1','2018-04-10 11:21:00.000')
insert into @t values ('1','2018-03-05 18:14:00.000')
insert into @t values ('1','2018-03-05 22:53:00.000')
insert into @t values ('2','2018-04-10 11:21:00.000')
insert into @t values ('2','2018-03-27 14:57:00.000')
insert into @t values ('2','2018-04-04 20:00:00.000')
insert into @t values ('3','2018-04-10 11:21:00.000')
insert into @t values ('3','2018-02-10 11:21:00.000')
insert into @t values ('3','2018-04-24 11:29:00.000')
insert into @t values ('4','2018-04-10 11:21:00.000')
insert into @t values ('4','2018-04-10 11:20:00.000')
insert into @t values ('4','2018-04-24 11:29:00.000')

select
 t1.id, t2.id
from @t t1
join @t t2 on t2.dt between dateadd(hh, -24,t1.dt) and t1.dt and t1.id<>t2.id
where t1.dt<>t2.dt
使用滞后:


用您正在使用的数据库标记您的问题。
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);