2015-03-31 22 views
0

我有一個由ClientID,ActionDate,Action和Result組成的表。MS SQL如何選擇最後N個記錄相同的客戶端

我需要選擇具有特定日期範圍內的特定操作/結果組合的不同客戶端。

舉例說明:

  1. 我需要不同的clientId,其最近5動作/結果是呼叫/無應答。
  2. 我需要在過去30天內只有Call/NoAnswer的獨特clientID。

感謝

+2

你試過這麼遠嗎? – 2015-03-31 12:27:35

+0

表的主鍵是什麼?此外,最後5包括或不包括這? – 2015-03-31 12:34:52

+0

我有麻煩設置「Where」子句。如果我將其設置爲特定的操作/結果,它只會計算這些操作。我應該建立的查詢邏輯並沒有在我的腦海中清理。 也許有幾個子選擇,它們會選擇Top1,Top2-Top1,Top3-(Top2-top1)等,它們應該都是相同的。我相信有更優雅的方式,但我太新手了,能夠弄清楚。 – Peraklo 2015-03-31 12:39:48

回答

2

1.

select ClientID from 
(
select 
    ClientID, 
    Action, 
    Result, 
    row_number() over (partition by ClientID order by ActionDate desc) as num 
from ClientActions 
) T -- the latest 5 action/result 
where rnum <= 5 
group by ClientID 
having MAX(case when Action='Call' and Result = 'NoAnswer' then 0 else 1 end) = 0 

2.

select ClientID 
from ClientActions 
where DATEDIFF(DAY, ActionDate, GETDATE()) <= 30 
group by ClientID 
having MAX(case when Action='Call' and Result = 'NoAnswer' then 0 else 1 end) = 0 
+0

第一個像魅力一樣工作,謝謝。我現在必須分析它,並試圖充分理解它,以備將來參考。 至於第二個,這將採取只有最後一次行動的客戶,對吧?如果我希望在上個月的所有操作都是Call/NoAnswer,該怎麼辦?我想我將不得不刪除MAX? – Peraklo 2015-03-31 13:17:22

+0

@Peraklo,與MAX的第二個查詢應採取在上個月的所有操作等於Call/NoAnswer的客戶端。你可以很容易地測試它 – ASh 2015-03-31 13:50:12

相關問題