Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql H2数据库-Rank()和Row_Num()的替代方案_Sql_H2 - Fatal编程技术网

Sql H2数据库-Rank()和Row_Num()的替代方案

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

我在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: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论坛: