1

我有以下 sql 语句。我正在尝试获得最高版本。我的查询返回多个结果,尽管按 verison desc 排序。我怎样才能得到最高的?

SELECT pv.version, pv.vin, pv.policyid, pv.segeffdate, pv.segexpdate, pv.changenum from
    nsa_al.polvehicle pv
WHERE pv.vin = '2GTEC19T011201788'
AND pv.changenum > 0
AND pv.VERSION = (SELECT MAX(PV.VERSION) FROM NSA_AL.POLVERSION)
ORDER BY pv.version DESC

我尝试使用 rownum = 1 但我一直缺少“)”错误。

谢谢

4

1 回答 1

3

有几种方法可以做到这一点。这是一个带有子查询和的ROWNUM

SELECT * 
FROM (
    SELECT pv.version, pv.vin, pv.policyid, pv.segeffdate, pv.segexpdate, pv.changenum 
    FROM nsa_al.polvehicle pv
    WHERE pv.vin = '2GTEC19T011201788'
        AND pv.changenum > 0
    ORDER BY pv.version DESC
) t
WHERE ROWNUM = 1

这只会返回一条记录。如果您需要领带,您可以改用分析功能RANK()

SELECT * 
FROM (
    SELECT RANK() OVER (ORDER BY version DESC) rnk, pv.version, pv.vin,  pv.changenum
    FROM pv
    WHERE pv.vin = '2GTEC19T011201788'
        AND pv.changenum > 0
    ORDER BY pv.version DESC
) t
WHERE rnk = 1

如果您更喜欢使用MAX聚合,那么最简单的方法是使用公用表表达式和JOIN表本身。如果有多个具有相同版本的记录,这可能会产生多个结果:

WITH CTE AS (
    SELECT pv.version, pv.vin,  pv.changenum
    FROM pv
    WHERE pv.vin = '2GTEC19T011201788'
        AND pv.changenum > 0
) 
SELECT * 
FROM CTE C
  JOIN (
    SELECT MAX(version) maxVersion 
    FROM CTE) C2 ON C.version = C2.maxVersion
于 2013-05-29T20:17:17.390 回答