我的表包含来电记录。
callid calling_pty dialed_num disposition dispvdn segment ucid
3862073 25555366 1001 1 1001 1 10000080561437527378
3862073 291113 1015 2 1015 2 10000080621437527416
3862074 635444419 1001 3 1001 1 10000081311437527892
3862075 25555596 1001 1 1001 1 10000081211437527803
3862075 26669 1014 3 1014 2 10000081231437527820
3862076 23044442 1009 2 1009 1 10000080961437527654
3862079 632444419 1001 1 1001 1 10000081361437527904
3862089 0111808 1001 1 1001 1 10000081671437528068
3862091 02366674 1001 1 1001 1 10000081011437527679
3862091 26666 1015 2 1015 2 10000081091437527712
3862097 63255529 1001 1 1001 1 10000081721437528139
3862097 29111 1014 3 1014 2 10000081771437528168
鉴于样本数据,我需要选择处置= 3的记录,但我需要首先检查它是否有较早的段[处置是呼叫的状态,3表示放弃,段是呼叫的数量实例,如果它在一次交易中被转移]。并返回第一个实例的calling_pty(调用者编号),因此如果没有,则返回该记录的编号。并且可以在callid的帮助下识别
所以使用给定的样本,
3862075 25555596 1001 1 1001 1 10000081211437527803
3862075 26669 1014 3 1014 2 10000081231437527820
它将返回给我" 25555596",它们具有相同的callid但不同的呼叫方,这意味着呼叫被转移然后它被放弃了。
因此:结果记录应该是" 25555596"记录。 *这适用于相同条件的所有记录,并将填充为列表
3862074 635444419 1001 3 1001 1 10000081311437527892
3862075 25555596 1001 1 1001 1 10000081211437527803
3862097 63255529 1001 1 1001 1 10000081721437528139
*这将是样本数据的最终结果
我做了一个嵌套的选择,但是在我将如何检查第一个实例的死胡同。有没有一个sql函数来实现这个?
答案 0 :(得分:0)
我使用了两个相关的子查询:
SELECT callid,
(SELECT calling_pty
FROM Log l
WHERE Log.callid = l.callid AND
segment = (SELECT MIN(segment)
FROM Log l2
WHERE l.callid = l2.callid)
)[calling_pty],
dialed_num, disposition, dispvdn, segment, ucid
FROM Log
WHERE disposition = 3