2013-10-01 60 views
1

我具有其中不同的客戶端被分配給不同的MC的表。與客戶端(84)一樣,將MC切換3次。現在我想獲得最新的客戶端= 84。我做這個查詢最新數據根據日期時間或CustMCId

select max(cstmrMC.CustMCId),cstmrMC.CustId,cstmrMC.MCID,cstmrMC.AssignDate 
    from CustomerMC cstmrMC 
    where cstmrMC.CustId=84 
    group by cstmrMC.CustMCId,cstmrMC.CustId,cstmrMC.MCID,cstmrMC.AssignDate 
    ORDER BY cstmrMC.CustMCId,cstmrMC.CustId,cstmrMC.MCID,cstmrMC.AssignDate 

這說明這個結果

CustMCId  CustId MCID   AssignDate 
52   84 18  2013-10-01 18:21:56.000 
59   84  7  2013-09-09 16:10:06.000 
80   84 19  2013-10-09 03:54:00.000 
156   84 21  2013-11-11 00:00:00.000 

現在我只希望這

156   84 21  2013-11-11 00:00:00.000 

我怎樣才能得到這樣的結果????

+0

因爲CUSTID = 84 latestly assing到MCID = 21 – AyliyaJan

回答

0

使用ROW_NUMBER功能分區和訂購客戶,使最新的MCID(基於AssignDate)是第一個每個客戶內。

WITH cteCustomers AS (
    SELECT CustMCId, CustId, MCID, AssignDate, 
      ROW_NUMBER() OVER(PARTITION BY CustId ORDER BY AssignDate DESC) AS RowNum 
     FROM CustomerMC 
) 
SELECT CustMCId, CustId, MCID, AssignDate 
    FROM cteCustomers 
    WHERE RowNum = 1; 
+0

喬:顯示正確的結果,但很難理解我,我不是初學者忍者:P – AyliyaJan

+0

@AyliyaJan:ROW_NUMBER函數安排您的數據分組。 PARTITION BY子句表示我希望每個CustId都被視爲一個分組。 ORDER BY表示,在每個CustId分組中,我希望根據降序AssignDate分配我創建的數字。因此,在每個客戶中,最近的AssignDate將被分配數字1.有意義嗎? –

+0

是的,謝謝喬:) – AyliyaJan