架构:
Table A
:AID(PK),RECEIVE_DATE Table B
:BID(PK),AID(FK),MESSAGE,ITEMID,ITEMTYPE 表A-to-B具有一对多映射。
这是一个有效的SQL查询(在SQL Server中),用于查找按ITEMID分组的最新消息,即不同的ITEMID(ITEMTYPE称为'XYZ')。
SELECT
result.MESSAGE, result.ITEMID
FROM
(SELECT
*,
ROW_NUMBER() OVER (PARTITION BY B.ITEMID ORDER BY A.RECEIVE_DATE desc) AS rn
FROM
A
JOIN
B ON A.AID = B.AID
WHERE
B.OBJREFTYPE = 'XYZ'
AND B.SUBJECT IS NOT NULL) result
WHERE
result.rn = 1
是否可以在不使用ROW_NUMBER
的情况下重写此查询?
答案 0 :(得分:1)
也许你可以使用这样的东西:
SELECT
b.MESSAGE, b.ITEMID
from a
inner join b on b.aid = a.aid
where a.receive_date in (select max(receive_date)
from a a1
inner join b b1 on b1.aid = a1.aid
where b1.itemid = b.itemid
);