我有以下查询返回数据,如下所示。但我需要排除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
以下是上述查询的结果
所需的结果只有8行,其中5为绿色,3为黑色(6为红色应该被消除)。
非常感谢你的帮助:))
答案 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