gpt4 book ai didi

sql-server - SQL Server : Comparing against next X in group

转载 作者:行者123 更新时间:2023-12-02 16:11:10 24 4
gpt4 key购买 nike

我知道我可以将上一行/下一行与 LAG 和 LEAD 进行比较,但在我正在进行的比较中;我需要能够偶尔跳过行(但仍然需要确认它们)

具体信息:我正在尝试跟踪调用环境中的咨询以及热转和冷转。每个调用都有一个唯一的 key ,并且每个阶段都有一个升序的员工编号。它还具有通话每个部分的开始和结束时间。
咨询被定义为在前一个非咨询段结束之前开始和结束的调用。
热传输是指前一个片段的结束在前一个片段的开始之后,并且在前一个片段的结束之后结束。
冷传输是在上一个段结束后开始的一个段。

示例数据:

topcallid   e_created       e_terminated    empnumEG995GIFM   16:22:40.933    16:29:51.010    1EG995GIFM   16:25:59.827    16:27:49.027    2EG995GIFM   16:30:07.453    16:37:44.500    3EG995GIFM   16:38:01.677    16:59:30.777    4EG995GIFM   16:59:46.737    17:16:48.397    5EG995GIFM   17:04:51.243    17:29:21.620    6

Desired output:

topcallid.......TransStatus  
EG995GIFM Consult (Stage 1 To 2)
EG995GIFM Cold Transfer (Stage 1 To 3)
EG995GIFM Cold Transfer (Stage 3 To 4)
EG995GIFM Cold Transfer (Stage 4 To 5)
EG995GIFM Warm Transfer (Stage 5 To 6)

当前代码,给出了将每个阶段与以下所有阶段进行比较的每个组合:

SELECT ta.topcallid,
CASE
WHEN ta.e_created < Trans.e_created AND ta.e_terminated > Trans.e_terminated THEN 'Consult (Stage ' + CAST(TA.EmpNum AS VARCHAR(3)) + ' To ' + CAST(Trans.EmpNum AS VARCHAR(3)) + ')'
WHEN ta.e_terminated < Trans.e_created THEN 'Cold Transfer (Stage ' + CAST(TA.EmpNum AS VARCHAR(3)) + ' To ' + CAST(Trans.EmpNum AS VARCHAR(3)) + ')'
WHEN ta.e_terminated > Trans.e_created THEN 'Warm Transfer (Stage ' + CAST(TA.EmpNum AS VARCHAR(3)) + ' To ' + CAST(Trans.EmpNum AS VARCHAR(3)) + ')'
END TransStatus
FROM [TransferTypeAnalysis] TA
JOIN [TransferTypeAnalysis] Trans
ON TA.topcallid = Trans.topcallid
AND ta.empnum < Trans.empnum
ORDER BY
TA.topcallid,
ta.empnum

最佳答案

看来您需要一个子查询来与之前终止的调用进行比较。此逻辑假设每个调用 ID 的终止时间都是唯一的。

select 
t3.topcallid,
case when t3.e_created < t4.e_created and t3.e_terminated > t4.e_terminated then 'Consult (Stage ' + cast(t3.EmpNum as varchar(3)) + ' To ' + cast(t4.EmpNum as varchar(3)) + ')'
when t3.e_terminated < t4.e_created then 'Cold Transfer (Stage ' + cast(t3.EmpNum as varchar(3)) + ' To ' + cast(t4.EmpNum as varchar(3)) + ')'
when t3.e_terminated > t4.e_created then 'Warm Transfer (Stage ' + cast(t3.EmpNum as varchar(3)) + ' To ' + cast(t4.EmpNum as varchar(3)) + ')'
end TransStatus
from
[TransferTypeAnalysis] t3
INNER JOIN
(
select
t1.topcallid, t1.empnum, t1.e_created, t1.e_terminated, max(t2.e_terminated) previous_term_dt
FROM
[TransferTypeAnalysis] t1
left join [TransferTypeAnalysis] t2
on t1.topcallid=t2.topcallid and t1.empnum>t2.empnum
GROUP BY t1.topcallid, t1.empnum, t1.e_created, t1.e_terminated
) as t4 on t3.topcallid = t4.topcallid and t3.e_terminated = t4.previous_term_dt

关于sql-server - SQL Server : Comparing against next X in group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30112400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com