这是我的数据样本。
-ID- -Rank- -Type- -Status- -Amount-
1142474 2 Under Offer Approved 23
1148492 1 Present Current 56
1148492 2 Under Offer Approved 3
2273605 1 Present Current 24
如果ID相同,我只想要排名最高的记录。所以查询的最终结果。
-ID- -Rank- -Type- -Status- -Amount-
1142474 2 Under Offer Approved 23
1148492 1 Present Current 56
2273605 1 Present Current 24
现在要获取原始数据集是一项昂贵的操作,因此我 希望想要按ID 执行组然后将排名和再次加入到数据集中。因此查询需要以另一种方式完成其工作。
干杯 安东尼
答案 0 :(得分:6)
这将有效:
with temp as (
select *, row_number() over (partition by id order by rank) as rownum
from table_name
)
select * from temp where rownum = 1
每个id会给出一个记录,其中rank代表最少的数字
答案 1 :(得分:2)
SELECT * FROM TheTable
WHERE 1 = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Rank DESC)
答案 2 :(得分:1)
select t1.id
, t1.rank
, t1.type
, t1.status
, t1.amount
from my_table t1
left outer join my_table as t2
on t1.id = t2.id
and
t2.rank < t1.rank
where t2.id is null
答案 3 :(得分:0)
一般可用的选项包括:
WITH子句有效地允许您为子查询指定名称;如果可能的话,优化器将避免重新评估它。 TEMP表解决方案可能是最简单的。那将是ID和MIN(排名)的GROUP BY并加入回来。
答案 4 :(得分:0)
为什么数据集如此昂贵,我认为这里没什么特别复杂的。你有所需的索引,是使用它们的查询吗?统计数据是否过时了?