选择每个ID

时间:2017-03-23 16:14:44

标签: sql sql-server

我有以下查询返回数据,如下所示。但我需要排除MODIFIEDDATETIME显示为红色的行,因为它们的COMMITRECID时间戳较低。如数据所示,COMMITRECID可能有多行具有最大时间戳。

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为绿色,3为黑色(6为红色应该被消除)。

非常感谢你的帮助:))

2 个答案:

答案 0 :(得分: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;

另外,请尝试在查询中使用tabla别名而不是整个表名。

*免责声明:您说您想要最大日期,但您帖子中的选定值是那些具有最小日期的值,因此我在答案中使用了该标准

答案 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