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

MySQL日期范围Max/Min子查询:获取首尾日期对应库存数据

调整后的SQL查询方案

我帮你把需求整合到查询里了,核心是用关联子查询来获取每组(按周、ASIN、SKU等分组)最早和最新日期对应的库存数据,同时保留你原来需要的所有字段。

完整查询示例

SELECT
    -- 保留原有的周起始日期计算逻辑
    (t.Date + INTERVAL -(WEEKDAY(t.Date)) DAY) AS week_start_date,
    -- 原有维度与聚合字段
    MAX(t.Date) AS latest_date,
    MIN(t.Date) AS earliest_date,
    t.ASIN,
    t.ItemSKU,
    it.avgInv,
    kt.Account,
    kt.Country,
    SUM(t.Sessions) AS Sessions,
    AVG(t.Session_Pct) AS Session_Pct,
    SUM(t.Page_Views) AS Page_Views,
    AVG(t.Page_Views_Pct) AS Page_Views_Pct,
    AVG(t.Buy_Box_Pct) AS Buy_Box_Pct,
    SUM(t.Units_Sold) AS Units_Sold, -- 补全你未写完的字段,可根据实际调整
    -- 子查询获取分组内最早日期的库存数据
    (
        SELECT sellable 
        FROM clabDevelopment.fba_history_daily fh_min 
        WHERE fh_min.Date = MIN(t.Date) 
          AND fh_min.ASIN = t.ASIN 
          AND fh_min.ItemSKU = t.ItemSKU
    ) AS earliest_sellable,
    -- 子查询获取分组内最新日期的库存数据
    (
        SELECT sellable 
        FROM clabDevelopment.fba_history_daily fh_max 
        WHERE fh_max.Date = MAX(t.Date) 
          AND fh_max.ASIN = t.ASIN 
          AND fh_max.ItemSKU = t.ItemSKU
    ) AS latest_sellable
FROM
    -- 这里假设你的主业务表是t,关联it和kt表(请替换成实际表名与关联条件)
    your_main_table t
JOIN clabDevelopment.inventory_table it ON t.ItemSKU = it.ItemSKU 
JOIN clabDevelopment.account_table kt ON t.Account = kt.Account 
GROUP BY
    -- 所有非聚合维度字段必须加入分组,避免语法错误
    week_start_date,
    t.ASIN,
    t.ItemSKU,
    it.avgInv,
    kt.Account,
    kt.Country;

关键细节说明

  • 关联子查询的作用:直接在WHERE里用MAX(Date)会触发语法错误(聚合函数不能直接用于WHERE子句),通过关联ASIN和ItemSKU,能确保子查询拿到的是当前分组内最早/最新日期对应的库存,而不是全局的极值数据。
  • 分组规则注意:所有出现在SELECT中的非聚合字段(比如ASIN、Account等)必须放到GROUP BY中,严格SQL模式下这是强制要求,避免数据逻辑混乱。
  • 字段灵活调整:我补全了Units_Sold字段,你可以根据实际业务需求,继续添加或修改其他未写完的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:18:09