对于此示例,速率计算的结果存储在临时表@results
中
该表包含
code | loc | total
661098 | 105 | 96.49
661098 | 106 | 70.03
661098 | 107 | 81.53
702998 | 105 | 104.54
702998 | 106 | 70.03
使用以下查询,我们可以获得每个位置的最低价格
select cr.loc, cr.total as lowest_total, cr.code
from @results cr
INNER JOIN (
SELECT loc, MIN(total) as lowest_total
from @results
GROUP BY loc) inside
ON inside.loc = cr.loc
and inside.lowest_total = cr.total
给出了以下内容
loc | total | code
105 | 96.49 | 661098
106 | 70.03 | 702998 <---
106 | 70.03 | 661098 <---
107 | 81.53 | 661098
请注意loc=106
的两个结果...我们想要随机选择(或更好的后两个/更高code
值),这样每个只返回一个total
loc
除了执行另一个嵌套选择或连接之外,是否有更高效(以SQL为单位)的方法来实现此目的?
答案 0 :(得分:4)
改为使用row_number()
:
select r.loc, r.total, r.code
from (select r.*,
row_number() over (partition by loc order by total desc, code desc) as seqnum
from @results r
) r
where seqnum = 1;