2017-03-23 97 views
1

我有以下查詢返回數據如下所示。但是我需要排除MODIFIEDDATETIME中顯示爲紅色的行,因爲它們有一個由COMMITRECID設置的較低時間戳。如數據中所示,COMMITRECID可能會有多行包含最大時間戳記。選擇每個ID的最大日期的所有行

SELECT REQCOMMIT.COMMITSTATUS, NOTEHISTORY.NOTE, NOTEHISTORY.MODIFIEDDATETIME, NOTEHISTORY.COMMITRECID 
FROM REQCOMMIT INNER JOIN NOTEHISTORY ON REQCOMMIT.RECID = NOTEHISTORY.COMMITRECID 
WHERE REQCOMMIT.PORECID = 1234 

這裏是上面的查詢

Query Result

期望的結果是隻有8行具有5在Green和3在黑色(6紅應該得到消除)的結果。

非常感謝您的幫助:)

回答

2

使用RANK

WITH CTE AS 
(
    SELECT R.COMMITSTATUS, 
      N.NOTE, 
      N.MODIFIEDDATETIME, 
      N.COMMITRECID, 
      RN = RANK() OVER(PARTITION BY N.COMMITRECID ORDER BY N.MODIFIEDDATETIME) 
    FROM REQCOMMIT R 
    INNER JOIN NOTEHISTORY N 
     ON R.RECID = N.COMMITRECID 
    WHERE R.PORECID = 1234 
) 
SELECT * 
FROM CTE 
WHERE RN = 1; 

順便說一句,請嘗試在查詢中使用別名塔布拉而不是整個表名。

*免責聲明:你說你想要的最大日期,但在您的文章所選擇的值是那些具有最小日期,所以我用在我的答案標準

1

這種方法只是限制了你的歷史記錄表正如你所描述的那些日期爲MIN

SELECT 
    REQCOMMIT.COMMITSTATUS, 
    NOTEHISTORY.NOTE, 
    NOTEHISTORY.MODIFIEDDATETIME, 
    NOTEHISTORY.COMMITRECID 
FROM REQCOMMIT 
INNER JOIN NOTEHISTORY ON REQCOMMIT.RECID = NOTEHISTORY.COMMITRECID 
INNER JOIN (SELECT COMMITRECID, MIN(MODIFIEDDATETIME) DT FROM NOTEHISTORY GROUP BY COMMITRECID) a on a.COMMITRECID = NOTEHISTORY.COMMITRECID and a.DT = NOTEHISTORY.MODIFIEDDATETIME 
WHERE REQCOMMIT.PORECID = 1234 
相關問題