Sql H2数据库-Rank()和Row_Num()的替代方案
我在java应用程序中使用H2数据库。它似乎不支持Sql H2数据库-Rank()和Row_Num()的替代方案,sql,h2,Sql,H2,我在java应用程序中使用H2数据库。它似乎不支持rank()和row_num()函数,因为它们仍在其上 这是我试图执行的查询 select * from ( select *, rank() over(partition by MSISDN order by PORT_IN_DATE desc) rank from TEST_PORTIN ) s where rank = 1 AND PORT_IN_DATE > '2012-01-16 23:2
rank()
和row_num()
函数,因为它们仍在其上
这是我试图执行的查询
select * from (
select *,
rank() over(partition by MSISDN order by PORT_IN_DATE desc) rank
from TEST_PORTIN
) s
where rank = 1
AND PORT_IN_DATE > '2012-01-16 23:20:27'
ORDER BY PORT_IN_DATE
对于特定的查询,不需要RANK()
。您可以按如下方式重写它:
SELECT *
FROM TEST_PORTIN t1
WHERE PORT_IN_DATE > '2012-01-16 23:20:27'
AND NOT EXISTS (
SELECT *
FROM TEST_PORTIN t2
WHERE t1.MSISDN = t2.MSISDN -- PARTITION BY clause translation
AND t1.PORT_IN_DATE > t2.PORT_IN_DATE -- ORDER BY clause translation
)
ORDER BY PORT_IN_DATE
或者,使用一个量化的比较谓词(但不一定更快)
SELECT *
FROM TEST_PORTIN t1
WHERE PORT_IN_DATE > '2012-01-16 23:20:27'
AND PORT_IN_DATE >= ALL (
SELECT PORT_IN_DATE
FROM TEST_PORTIN t2
WHERE t1.MSISDN = t2.MSISDN
)
ORDER BY PORT_IN_DATE
可能的副本另见H2论坛: