SQL查询以选择组中的组

时间:2014-10-20 05:21:36

标签: sql sql-server

您好我无法找到为下面的表格和场景编写SQL查询的方法

让我们说下面有表格。 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  

1 个答案:

答案 0 :(得分: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