2017-07-30 42 views
1

您能否請幫助我如何獲得預期的輸出,如下面的屏幕截圖所示?無法使用密集等級獲得期望的輸出

DECLARE @TT TABLE (CUSTOMERID INT, TYPE VARCHAR(100) , D1 DATE) 
INSERT INTO @TT VALUES (15001,'TYPE1', '4/1/2017') 
INSERT INTO @TT VALUES (15001,'TYPE1', '4/2/2017') 
INSERT INTO @TT VALUES (15001,'TYPE1', '4/3/2017') 
INSERT INTO @TT VALUES (15001,'NON TYPE1', '4/4/2017') 
INSERT INTO @TT VALUES (15001,'NON TYPE1', '4/5/2017') 
INSERT INTO @TT VALUES (15001,'NON TYPE1', '4/6/2017') 
INSERT INTO @TT VALUES (245,'Non TYPE1', '4/1/2017') 
INSERT INTO @TT VALUES (245,'Non TYPE1', '4/2/2017') 
INSERT INTO @TT VALUES (245,'Non TYPE1', '4/3/2017') 
INSERT INTO @TT VALUES (245,'TYPE1', '4/4/2017') 
INSERT INTO @TT VALUES (245,'TYPE1', '4/5/2017') 
INSERT INTO @TT VALUES (245,'TYPE1', '4/6/2017') 

查詢是:

SELECT * , 
     DENSE_RANK() OVER (PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR 
FROM @TT 
WHERE CUSTOMERID = 15001 
ORDER BY CUSTOMERID,D1 

SELECT *, 
     DENSE_RANK() OVER (PARTITION BY CUSTOMERID ORDER BY CUSTOMERID,TYPE) DR 
FROM @TT 
WHERE CUSTOMERID = 245 
ORDER BY CUSTOMERID,D1 

enter image description here

謝謝你的幫助。

+0

使用'ORDER BY TYPE DESC' –

+0

是的,我知道這一點,但實際的數據同時具有ASC和DESC類型的場景組合。所以不能使用這個。 我修改了有問題的示例數據以突出場景 – Ram

回答

1

您想按最短日期排序。我認爲這是這樣的:

SELECT t.*, 
     DENSE_RANK() OVER (PARTITION BY CUSTOMERID ORDER BY mind1, TYPE) DR 
FROM (SELECT t.*, MIN(d1) OVER (PARTITION BY CUSTOMERID, TYPE) as mind1 
     FROM @TT t 
    ) t 
WHERE CUSTOMERID = 15001 
ORDER BY CUSTOMERID, D1; 

這種假定類型不交錯(如在你的例子)。如果是這種情況,那麼請提出另一個問題。這顯着改變了這個問題。這個問題也應該提供更好的樣本數據和期望的結果。

+0

完美。謝謝Gordon的幫助。 – Ram