重写没有Row_Number的SQL查询,以便它可以映射到Hibernate

时间:2017-06-08 05:58:07

标签: sql oracle

架构:

  • 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的情况下重写此查询?

1 个答案:

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