2016-11-24 32 views
-2

這是我的表。我想有升級呼叫只有一條記錄和千鈞一髮的手機號碼特定行如何從表中刪除我不想要的行

Mobile_No Call_Time   Pick_Time   Close_Time  Call_Duration CallStatus 
7777777777 23-11-2016 16:47 23-11-2016 16:47 NULL    NULL    ATTEND 
8080808080 21-11-2016 12:59 21-11-2016 13:02 21-11-2016 13:03 0.001446759  ESCALATE 
8080808080 21-11-2016 12:59 21-11-2016 13:03 NULL    NULL    ESCALATE 
8087617483 21-11-2016 13:05 23-11-2016 16:02 23-11-2016 16:02 00:00:18   CLOSE 
8087617483 21-11-2016 13:05 23-11-2016 16:02 NULL    NULL    CLOSE 
8655246108 21-11-2016 13:05 22-11-2016 10:59 23-11-2016 16:39 30:1780:106836 CLOSE 
8655246108 21-11-2016 13:05 23-11-2016 16:39 24-11-2016 11:44 19:1145:68698 CLOSE 
9167485255 21-11-2016 13:07 23-11-2016 16:34 23-11-2016 16:38 0.005659722  ESCALATE 
9167485255 21-11-2016 13:07 23-11-2016 16:38 NULL    NULL    ESCALATE 
9890473692 21-11-2016 13:07 22-11-2016 11:36 22-11-2016 11:53 0.023622685  CLOSE 
9890473692 21-11-2016 13:07 22-11-2016 11:53 24-11-2016 11:31 48:2858:171423 CLOSE 
9890473692 24-11-2016 11:29 24-11-2016 11:31 24-11-2016 11:47 0.022337963  ATTEND 

現在我想輸出

Mobile_No Call_Time   Pick_Time    Close_Time   Call_Duration CallStatus 
7777777777 2016-11-23 16:47:26 2016-11-23 16:47:43 NULL     NULL    ATTEND 
8080808080 2016-11-21 12:59:44 2016-11-21 13:02:15 2016-11-21 13:03:20 0:1:65   ESCALATE 
8080808080 2016-11-21 12:59:44 2016-11-21 13:03:20 NULL     NULL    ESCALATE 
8087617483 2016-11-21 13:05:04 2016-11-23 16:02:35 2016-11-23 16:02:53 0:0:18   CLOSE 
8087617483 2016-11-21 13:05:04 2016-11-23 16:02:53 NULL     NULL    CLOSE 
8655246108 2016-11-21 13:05:59 2016-11-22 10:59:16 2016-11-23 16:39:52 30:1780:106836 CLOSE 
8655246108 2016-11-21 13:05:59 2016-11-23 16:39:52 2016-11-24 11:44:50 19:1145:68698 CLOSE 
9167485255 2016-11-21 13:07:57 2016-11-23 16:34:16 2016-11-23 16:38:25 0:4:249 ESCALATE 
9167485255 2016-11-21 13:07:57 2016-11-23 16:38:25  NULL    NULL    ESCALATE 
9890473692 2016-11-21 13:07:00 2016-11-22 11:36:56 2016-11-22 11:53:57 0:17:1021   CLOSE 
9890473692 2016-11-21 13:07:00 2016-11-22 11:53:57 2016-11-24 11:31:00 48:2858:171423 CLOSE 
9890473692 2016-11-24 11:29:20 2016-11-24 11:31:00  2016-11-24 11:47:10 0:16:970   ATTEND 
+0

檢查你的問題你都表數據和輸出也一樣你期望的輸出 – Mansoor

+2

你的問題是什麼沒有說清楚。聽起來你想爲每個手機號碼記錄一個記錄(是你唯一的領域?),然後返回一個'升級'的外觀和一個'關閉'的外觀,這是否正確?另外,你已經嘗試過了什麼?你究竟在幹什麼?如果一個電話有多個關於呼叫狀態「關閉」的條目,那麼您的標準是什麼? –

+0

唯一的區別是日期格式和持續時間一次爲十進制小時,一次爲時間格式。你期望什麼?你想要消除什麼? –

回答

0

嘗試此查詢

select Mobile_No,to_char(Call_Time,'yyyy-mm-dd hh12:mm:ss'),Pick_Time,Close_Time,Call_Duration,CallStatus from table where Mobile_No in 
(select Mobile_No from table having (select count(*) from table where callstatus ='escalate')=1 and having (select count(*) from table where callstatus ='close')=1) 
0
 CREATE TABLE Table11 
    (Mobile_No bigint, Call_Time varchar(16), Pick_Time varchar(16), Close_Time varchar(16), Call_Duration varchar(14), CallStatus varchar(8)) 
; 

INSERT INTO Table11 (Mobile_No, Call_Time, Pick_Time, Close_Time, Call_Duration, CallStatus) VALUES 
    (7777777777, '23-11-2016 16:47', '23-11-2016 16:47', NULL, NULL, 'ATTEND'), 
    (8080808080, '21-11-2016 12:59', '21-11-2016 13:02', '21-11-2016 13:03', '0.001446759', 'ESCALATE'), 
    (8080808080, '21-11-2016 12:59', '21-11-2016 13:03', NULL, NULL, 'ESCALATE'), 
    (8087617483, '21-11-2016 13:05', '23-11-2016 16:02', '23-11-2016 16:02', '00:00:18', 'CLOSE'), 
    (8087617483, '21-11-2016 13:05', '23-11-2016 16:02', NULL, NULL, 'CLOSE'), 
    (8655246108, '21-11-2016 13:05', '22-11-2016 10:59', '23-11-2016 16:39', '30:1780:106836', 'CLOSE'), 
    (8655246108, '21-11-2016 13:05', '23-11-2016 16:39', '24-11-2016 11:44', '19:1145:68698', 'CLOSE'), 
    (9167485255, '21-11-2016 13:07', '23-11-2016 16:34', '23-11-2016 16:38', '0.005659722', 'ESCALATE'), 
    (9167485255, '21-11-2016 13:07', '23-11-2016 16:38', NULL, NULL, 'ESCALATE'), 
    (9890473692, '21-11-2016 13:07', '22-11-2016 11:36', '22-11-2016 11:53', '0.023622685', 'CLOSE'), 
    (9890473692, '21-11-2016 13:07', '22-11-2016 11:53', '24-11-2016 11:31', '48:2858:171423', 'CLOSE'), 
    (9890473692, '24-11-2016 11:29', '24-11-2016 11:31', '24-11-2016 11:47', '0.022337963', 'ATTEND') 
; 
with cte as 
(
select * ,row_number() over (partition by mobile_no,CallStatus order by call_time) as rn from Table11 
) 
select * from cte where rn=1 and CallStatus not in('ESCALATE','CLOSE') 

輸出

Mobile_No Call_Time Pick_Time Close_Time Call_Duration CallStatus rn 
8080808080 21-11-2016 12:59 21-11-2016 13:02 21-11-2016 13:03 0.001446759 ESCALATE 1 
8087617483 21-11-2016 13:05 23-11-2016 16:02 23-11-2016 16:02 00:00:18 CLOSE 1 
8655246108 21-11-2016 13:05 22-11-2016 10:59 23-11-2016 16:39 30:1780:106836 CLOSE 1 
9167485255 21-11-2016 13:07 23-11-2016 16:34 23-11-2016 16:38 0.005659722 ESCALATE 1 
9890473692 21-11-2016 13:07 22-11-2016 11:36 22-11-2016 11:53 0.023622685 CLOSE 1 
0

試試這個

WITH cte as 
(
    SELECT Mobile_No, Call_Time, Pick_Time, Close_Time, Call_Duration, CallStatus, 
      ROW_NUMBER() OVER (PARTITION BY Mobile_No,CallStatus ORDER  BY Call_Time) AS ROWNUM 
    FROM TableName 
) 
SELECT Mobile_No, Call_Time, Pick_Time, Close_Time, Call_Duration, CallStatus 
FROM cte 
WHERE ROWNUM=1 and CallStatus <>'ATTEND' 
相關問題