我有一个名为“Procurement”的 SQL 表:
文章ID | 供应商ID | 交货时间 |
---|---|---|
1 | 1 | 4 |
1 | 2 | 6 |
1 | 3 | 8 |
2 | 4 | 3 |
2 | 5 | 5 |
2 | 6 | 7 |
我希望每件物品的交货时间最短的供应商:
文章ID | 供应商ID | 交货时间 |
---|---|---|
1 | 1 | 4 |
2 | 4 | 3 |
我在获取正确的供应商 ID 时遇到问题:
SELECT ArticleID, Min(DeliveryTime) AS DeliveryTime
FROM Procurement
GROUP BY ArticleID
由于 Group By - 子句,SupplierID 列必须出现在聚合函数中...
我怎样才能实现我的目标?
这是每个组中不存在的top(n),我相信sqlanywhere支持窗口函数(如果您可以与多个供应商有联系,请使用dense_rank):
select ArticleId, SupplierId, DeliveryTime
from (
select *,
Row_Number() over(partition by ArticleId order by DeliveryTime) rn
from Procurement
)t
where rn = 1;