我想选择表中的所有记录,除了在给定时间间隔内为 CustId 重复的一些记录。
以下是理解需求的简单示例,假设我想跳过相同 CustId 在 60 分钟(60 分钟是时间间隔)内重复的记录。正如您在下面的数据中所看到的,“Cust1”的第 2 行和第 3 行重复,“Cust2”的第 6 行重复。
+------------------------------------+ | 身份证 | 客户 ID | 捕获时间 | +------------------------------------+ | 1 | 'Cust1' | '2017-10-01 10:30' | | 2 | 'Cust1' | '2017-10-01 10:45' | -- 重复行 | 3 | 'Cust1' | '2017-10-01 11:35' | -- 重复行 | 4 | 'Cust1' | '2017-10-01 12:40' | | 5 | 'Cust2' | '2017-10-01 16:15' | | 6 | 'Cust2' | '2017-10-01 17:00' | -- 重复行 | 7 | 'Cust4' | '2017-10-02 08:00' | | 8 | 'Cust1' | '2017-10-02 10:45' | | 9 | 'Cust3' | '2017-10-02 13:00' | | 10 | 'Cust3' | '2017-10-02 14:05' | +----+---------+------------+
所以结果应该是
+------------------------------------+ | 身份证 | 客户 ID | 捕获时间 | +------------------------------------+ | 1 | 'Cust1' | '2017-10-01 10:30' | | 4 | 'Cust1' | '2017-10-01 12:40' | | 5 | 'Cust2' | '2017-10-01 16:15' | | 7 | 'Cust4' | '2017-10-02 08:00' | | 8 | 'Cust1' | '2017-10-02 10:45' | | 9 | 'Cust3' | '2017-10-02 13:00' | | 10 | 'Cust3' | '2017-10-02 14:05' | +----+---------+------------+
任何帮助表示赞赏。
您可以像这样使用LAG来比较时间
declare @myt table (id int,custid nvarchar(50),capturedtime datetime
)
insert into @myt
values
( 1 , 'Cust1', '2017-10-01 10:30'),
( 2 , 'Cust1', '2017-10-01 10:45'),
( 3 , 'Cust1', '2017-10-01 11:35'),
( 4 , 'Cust1', '2017-10-01 12:40'),
( 5 , 'Cust2', '2017-10-01 16:15'),
( 6 , 'Cust2', '2017-10-01 17:00'),
( 7 , 'Cust4', '2017-10-02 08:00'),
( 8 , 'Cust1', '2017-10-02 10:45'),
( 9 , 'Cust3', '2017-10-02 13:00'),
( 10, 'Cust3', '2017-10-02 14:05')
select ID,Custid,CapturedTime from (
select * ,datediff(MINUTE,odtime,capturedtime) mm from (
select *,LAG(capturedtime,1,0) over(partition by custid,cast(capturedtime as date )order by custid,capturedtime) as odtime from @myt
)x
)z where mm >= 60
order by id
结果
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句