SQL查询仅从结果集中返回每个位置的最低价格

时间:2014-09-19 16:37:07

标签: sql

对于此示例,速率计算的结果存储在临时表@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为单位)的方法来实现此目的?

1 个答案:

答案 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;