You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取每个商品最短配送时间对应的ArticleID与SupplierID?

获取每个商品最短配送时间对应供应商的解决方案

下面提供几种实用的SQL写法,解决你无法直接关联SupplierID的问题:

方法一:子查询关联(兼容多数数据库)

先通过子查询算出每个商品的最短配送时间,再和原表关联匹配,就能拿到对应的供应商ID:

SELECT p.ArticleID, p.SupplierID, p.DeliveryTime
FROM Procurement p
INNER JOIN (
    SELECT ArticleID, MIN(DeliveryTime) AS MinDeliveryTime
    FROM Procurement
    GROUP BY ArticleID
) t ON p.ArticleID = t.ArticleID AND p.DeliveryTime = t.MinDeliveryTime;

如果多个供应商给同一商品的配送时间都是最短的,这个写法会返回所有符合条件的供应商记录。

方法二:窗口函数(适合支持SQL:2003及以上的数据库,如MySQL8+、PostgreSQL、SQL Server等)

用ROW_NUMBER()或RANK()窗口函数,按商品分组后按配送时间排序,取排序第一的记录:

用ROW_NUMBER()(仅返回一条最短记录,若有多个同最短时间的供应商,随机选一个)

SELECT ArticleID, SupplierID, DeliveryTime
FROM (
    SELECT 
        ArticleID,
        SupplierID,
        DeliveryTime,
        ROW_NUMBER() OVER (PARTITION BY ArticleID ORDER BY DeliveryTime ASC) AS rn
    FROM Procurement
) t
WHERE rn = 1;

用RANK()(返回所有配送时间最短的供应商记录)

SELECT ArticleID, SupplierID, DeliveryTime
FROM (
    SELECT 
        ArticleID,
        SupplierID,
        DeliveryTime,
        RANK() OVER (PARTITION BY ArticleID ORDER BY DeliveryTime ASC) AS rn
    FROM Procurement
) t
WHERE rn = 1;

窗口函数写法更简洁,执行效率也通常更优,推荐在支持的数据库中使用。

内容的提问来源于stack exchange,提问作者GrayFox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:04:58