2014-09-19 35 views
1

在這個例子中,率計算的結果存儲在一個臨時表@results 該表使用下面的查詢包含SQL查詢到每個位置從結果只返回一個最低的價格設定

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值或更好)的兩個那麼只有一個totalloc

返回是否有更有效的(SQL-明智的)完成這種方式除了做另一個嵌套選擇或連接?

回答

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; 
+0

光滑...發送到DBA評估 – Dave 2014-09-19 16:42:10

+0

反饋是它的工作出色。稍後會詳細解讀我自己的啓發。謝謝。 – Dave 2014-09-19 17:43:08

相關問題