2017-03-23 10 views
1

以下のようにデータを返す次のクエリがあります。しかし、COMMITRECIDによってタイムスタンプが小さいので、赤で示されたMODIFIEDDATETIMEの行を除外する必要があります。データに示すように、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 

は、上記のクエリの結果は、所望の結果は黒でグリーン5と3との唯一8行(レッド6が解消取得べき)である

Query Result

あります。

はあなたの助けをありがとうございました:)

答えて

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 
関連する問題