由于我对外部申请并不那么熟悉,因此我不得不重写先前提出的问题以加入。它运作良好,但不适用于大数据量。对此有任何帮助。
答案 0 :(得分:0)
您可以使用以下方法:
CTE
创建一组并使用ROW_NUMBER
为您的呼叫编号。ROW_NUMBER
允许指定OVER()
和PARTITION BY
部分的ORDER BY
子句这将返回您的电话列表,其中每个电话号码以EntryTime
的顺序作为连续索引。
然后可以使用 self-join 查找对应的上一个行。
declare @table table (
PhoneNumber nvarchar(20),
EntryTime datetime
)
insert into @table values ('(321) 546-7842', dateadd(hour,-30,getdate()));
insert into @table values ('(321) 546-7842', dateadd(hour,-3,getdate()));
insert into @table values ('(251) 546-9442', dateadd(hour,-2,getdate()));
WITH cte AS
(
SELECT ROW_NUMBER() OVER(PARTITION BY PhoneNumber ORDER BY EntryTime) AS CallIndex
,t.*
FROM @table t
)
SELECT *
FROM cte t1
LEFT JOIN cte t2 ON t1.PhoneNumber=t2.PhoneNumber AND t1.CallIndex=t2.CallIndex-1
ORDER BY t1.PhoneNumber, t1.EntryTime;