2015-04-01 82 views
-1

我有價格數據的一個巨大的表,用下面的列SQL過濾器最低價格

source, product, term, miles, price 

的數據看起來是這樣

LL, PH, 3, 10000, 100.00 
BA, PH, 3, 10000, 200.00 
LL, CH, 3, 10000, 300.00 
BA, CH, 3, 10000, 400.00 

我需要創建一個查詢來篩選行以僅顯示每個唯一來源/產品/術語/英里組合的最低價格的行。所以在上面的例子中,我想結束:

LL, PH, 3, 10000, 100.00 
BA, PH, 3, 10000, 200.00 

任何幫助表示讚賞。謝謝。

+0

到目前爲止你寫的代碼是什麼? – Sim1 2015-04-01 08:25:27

+3

使用按組來源,產品,術語,英里和選擇來源,產品,術語,英里,MIN(價格)' – 2015-04-01 08:25:32

+2

您的預期輸出與您的樣品數據不符。 – 2015-04-01 08:31:28

回答

3

您可以使用ROW_NUMBER()本:

SQL Fiddle

SELECT 
    source, product, term, miles, price 
FROM(
    SELECT *, 
     RN = ROW_NUMER() OVER(PARTITION BY source, product, term, miles ORDER BY price) 
    FROM [your_table] 
)t 
WHERE RN = 1 

或按編碼器代碼的評論,你可以使用MIN()GROUP BY

SQL Fiddle

SELECT 
    source, product, term, miles, price = MIN(price) 
FROM [your_table] 
GROUP BY source, product, term, miles 
0
select source, product, term, miles, price 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t1.source = t2.source 
        and t2.price < t1.price) 

如果你想以最低的價格源/產品連續技,增加產品的分選的條件:

select source, product, term, miles, price 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t1.source = t2.source 
        and t1.product = t2.product 
        and t2.price < t1.price) 
使用 NOT EXISTS到沒有更低的價格存在相同的源返回行

如果有一條領帶,兩行都會返回!

-1
SELECT 
    source, product, term, miles, MIN(price) AS price 
FROM [table_name] 
GROUP BY source, product, term, miles