我们需要使用SQL查询语句来从数据库中提取数据。以下是一个可能的SQL查询示例,假设你有一个名为sales的表,其中包含shop_id(店铺ID)、product_id(商品ID)、sku_id(库存单位ID)、year(销售年份)和quantity(销量)字段。

WITH RankedProducts AS (
    SELECT
        s.shop_id,
        p.product_id,
        p.sku_id,
        p.quantity,
        RANK() OVER (PARTITION BY s.shop_id, p.product_id ORDER BY p.quantity DESC) as rank
    FROM
        sales s
    JOIN
        products p ON s.product_id = p.product_id AND s.sku_id = p.sku_id
    WHERE
        s.year = EXTRACT(YEAR FROM CURRENT_DATE)
),
TopProducts AS (
    SELECT
        shop_id,
        product_id,
        MAX(quantity) as max_quantity
    FROM
        RankedProducts
    GROUP BY
        shop_id, product_id
)
SELECT
    rp.shop_id,
    rp.product_id,
    rp.sku_id,
    rp.quantity
FROM
    RankedProducts rp
JOIN
    TopProducts tp ON rp.shop_id = tp.shop_id AND rp.product_id = tp.product_id AND rp.quantity = tp.max_quantity
WHERE
    rp.rank = 1
ORDER BY
    rp.shop_id, rp.quantity DESC
LIMIT 5;

这个查询做了以下几件事情:

  1. RankedProducts 公用表表达式(CTE):为每个店铺的每个商品按销量降序排名。
  2. TopProducts CTE:找出每个店铺每个商品销量最高的记录。
  3. 最终查询:结合RankedProductsTopProducts CTE,选择每个店铺销量最高的前5个商品及其销量最高的SKU。

请注意,这个查询假设products表存在,并且sales表与products表通过product_idsku_id字段关联。你可能需要根据你的实际数据库结构调整这个查询。

此外,这个查询使用了EXTRACT(YEAR FROM CURRENT_DATE)来获取当前年份,这在某些数据库系统中可能需要调整(例如,使用YEAR(CURRENT_DATE))。

如果你的数据库系统不支持窗口函数(如RANK()),你可能需要使用不同的方法来实现相同的结果。如果你需要针对特定数据库系统的查询帮助,请提供更多的上下文信息。