2014-10-20 55 views
0

您好,我無法弄清楚爲以下表格和場景編寫SQL查詢的方式用於選擇組中的組的SQL查詢

假設我們有以下表格即viz。 LowestBid

ItemID  SuppplierID LowestBid 

A1     S1    10 
A1     S2    20 
A1     S3    30 
B1     S2    10 
B1     S3    20 
C1     S3    10 
C1     S1    20 
C1     S2    30 

假設我們有一個函數,它具有參數即viz。 N,預期的SQL查詢的輸出就像例如N = 1。 對於N = 1,我們需要爲同一商品的出價值最低的每個商品找到一個供應商。

ItemID  SuppplierID LowestBid 

A1     S1    10 
B1     S2    10 
C1     S3    10 

如果N = 2 對於N = 2,我們需要找到其出價價值是相同的項目最低和第二低的投標值每件商品的供應商。

ItemID  SuppplierID LowestBid 

A1     S1    10 
A1     S2    20 
B1     S2    10 
B1     S3    20 
C1     S3    10 
C1     S1    20 
+0

要清楚,你想要的最低投標ñp呃物品? – 2014-10-20 05:26:09

+3

你正在使用哪個DBMS? – DirkNM 2014-10-20 05:26:16

+0

@JoshSmeaton是的,你是對的。 – 2014-10-20 05:39:55

回答

2

如果你使用的是Postgres或具有分析/窗口功能的另一個RDBMS,你可以使用row_number來過濾行你感興趣的:

select 
    q.item_id, 
    q.supplier_id, 
    q.bid 
from (
select 
    item_id, 
    supplier_id, 
    bid, 
    row_number() over (partition by item_id order by bid) as row_num 
from bids) q 
where q.row_num <= 2 -- N=2; 

產地:

ITEM_ID SUPPLIER_ID BID 
1  1   10 
1  2   20 
2  3   10 
2  1   20 
3  2   10 
3  3   20 

在這裏看到的小提琴:http://sqlfiddle.com/#!3/ce3a1/1

+0

它的工作和解決了我的問題。非常感謝。你能否建議我,我怎樣才能提高我的編寫SQL查詢的技能。 – 2014-10-20 06:13:51

+0

@maheshcs只是很多練習。如果您對定期查詢和聚合相當有信心,請查看分析查詢和窗口函數以獲取更高級的內容。 – 2014-10-20 12:31:26

+0

非常感謝你的建議。 – 2014-11-20 13:26:57