2017-03-23 63 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 
相关问题