我在结果集的分区中的sql中使用ROW_NUMBER函数,其中我只想要每个分区中的第一行。这是查询:
Select A, B, C, ROW_NUM
FROM
(SELECT A,B,C, ROW_NUMBER() OVER (PARTITION BY A ORDER BY C DESC) AS R0W_NUM
FROM TABLE
)X
WHERE ROW_NUM = 1
它产生了预期的结果。
但不是这样,现在我使用FIRST_VALUE函数,如下所示:
SELECT A,B,C, FIRST_VALUE(C) OVER (PARTITION BY A ORDER BY C DESC) AS ROW_NUM
FROM TABLE
但是上面的查询也给了我重复的值。任何人都可以指导我如何摆脱重复?我尝试使用DISTINCT,没有帮助。
答案 0 :(得分:0)
在C上使用FIRST_VALUE不会消除A的重复。
如果你想摆脱A的重复,你可以使用以下查询之一,具体取决于B的角色。
如果B被认为是分区的一部分,则类似于A
Select A, B, MAX(C)
FROM TABLE
GROUP BY A, B
如果B包含可以聚合的值(min,max,sum ...),则类似于C
Select A, MAX(B), MAX(C)
FROM TABLE
GROUP BY A
如果B既不与A(可能分区)或C(可能聚合)相似,那么我会保留你在问题中包含的ROW_NUMBER()解决方案。