2017-12-18 106 views
1

我是新來的SQL需要一些幫助與基於VALUE_TYPE列提取最新的交易編號爲客戶代碼SQL - 返回基於另一列獨特的列值

我與這些值如下表:

cust_code Trans_no trans_Type Time_of_trans 
    RTST  RTST#289  128  2017-12-13 13:23:16.000 
    RTST  RTST#290  8  2017-12-13 13:18:52.000 
    RTST  RTST#291  4  2017-12-13 13:12:37.000 
    NBST  NBST#789  128  2017-12-13 13:12:36.000 
    RTST  RTST#293  4  2017-12-12 12:27:12.000 
    DIFD  DIFD#2   4  2017-12-12 12:27:12.000 
    RTST  RTST#295  4  2017-12-12 12:26:15.000 
    NBST  NBST#784  4  2017-12-12 12:26:15.000 
    RTST  RTST#297  4  2017-12-12 11:13:29.000 

我想運行一個查詢,將只顯示所有客戶代碼的所有類型的最新trans_no。

我希望到輸出,顯示是這樣的:

cust_code Trans_no trans_Type Time_of_trans 
    RTST  RTST#289  128  2017-12-13 13:23:16.000 
    RTST  RTST#290  8  2017-12-13 13:18:52.000 
    RTST  RTST#291  4  2017-12-13 13:12:37.000 
    NBST  NBST#789  128  2017-12-13 13:12:36.000 
    NBST  NBST#784  4  2017-12-12 12:26:15.000 
    DIFD  DIFD#7   4  2017-12-12 12:27:12.000 
    DIFD  DIFD#5   8  2017-12-12 09:57:44.000 
    DIFD  DIFD#4   128  2017-12-12 09:53:44.000 

已經四處搜尋我發現下面的查詢,但它只返回的最後交易時間爲每個類型:

SELECT CUST_CODE,trans_no ,TRANS_TYPE,Time_of_trans從客戶點t1 WHERE = t1.Time_of_trans

(SELECT MAX(Time_of_trans)來自客戶的T 2,其中t2.trans_type = t1.trans_type )

是否有一個查詢會返回我以後的內容? 感謝

回答

2

使用ROW_NUMBER

SELECT cust_code, Trans_no, trans_Type, Time_of_trans 
FROM 
(
    SELECT cust_code, Trans_no, trans_Type, Time_of_trans, 
     ROW_NUMBER() OVER (PARTITION BY cust_code, trans_Type ORDER BY Time_of_trans DESC) rn 
    FROM yourTable 
) t 
WHERE t.rn = 1; 

上面的查詢將分配的行編號,從1開始,到每個組的具有相同的客戶代碼和交易類型的記錄。此編號將從最新的記錄開始,由交易時間確定。然後,我們子查詢只保留每個組的第一個這樣的記錄。

+0

謝謝,當運行查詢時,我得到以下內容: Msg 102,Level 15,State 1,Line 35 'PARTITON'附近的語法不正確。 我在2014 SQL Express實例上測試這個。 –

+0

「PARTITION」的錯字'PARTITON'。修復錯字並且查詢應該可以正常工作。 –

+0

謝謝!我沒有發現錯字。這工作完美。非常感謝! –