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

MariaDB查询生产表最新生产数量异常,返回最大值而非目标值

解决方法:获取指定产品的最新生产数量

你的问题根源在于原查询没有正确定位到最新日期的生产记录,同时因为缺少GROUP BY子句,聚合函数SUM()导致数据库返回了任意一条匹配记录的production_qty(刚好是表中第一条40003的数值545)。

方案1:仅获取最新生产数量与产品基础信息

如果你只需要最新的生产数量,用子查询先找到该产品的最新生产日期,再匹配对应记录:

SELECT 
    p.product_id,
    p.product_unit,
    pr.production_qty AS latest_production_qty
FROM products p
JOIN production pr ON p.product_id = pr.prod_id
WHERE pr.prod_id = 40003
  AND pr.production_date = (
      -- 子查询获取prod_id=40003的最新生产日期
      SELECT MAX(production_date)
      FROM production
      WHERE prod_id = 40003
        AND production_date < CURRENT_DATE
  );

这个查询会返回你预期的latest_production_qty=7,同时关联产品的product_id和product_unit。

方案2:同时保留总生产数量(prod_in_hand)

如果需要同时展示总生产数量总和和最新生产数量,可以用子查询计算总和:

SELECT 
    p.product_id,
    p.product_unit,
    pr.production_qty AS latest_production_qty,
    -- 子查询计算该产品的总生产数量
    (SELECT SUM(production_qty) FROM production WHERE prod_id = 40003 AND production_date < CURRENT_DATE) AS prod_in_hand
FROM products p
JOIN production pr ON p.product_id = pr.prod_id
WHERE pr.prod_id = 40003
  AND pr.production_date = (
      SELECT MAX(production_date)
      FROM production
      WHERE prod_id = 40003
        AND production_date < CURRENT_DATE
  );

或者用MariaDB 10.3支持的窗口函数,写法更简洁:

SELECT DISTINCT
    p.product_id,
    p.product_unit,
    -- 按日期倒序取第一条生产数量
    FIRST_VALUE(pr.production_qty) OVER (PARTITION BY pr.prod_id ORDER BY pr.production_date DESC) AS latest_production_qty,
    -- 计算该产品的总生产数量
    SUM(pr.production_qty) OVER (PARTITION BY pr.prod_id) AS prod_in_hand
FROM products p
JOIN production pr ON p.product_id = pr.prod_id
WHERE pr.prod_id = 40003
  AND pr.production_date < CURRENT_DATE;

原查询的问题说明

  1. 缺少GROUP BY:当你使用SUM()这类聚合函数时,必须用GROUP BY指定分组字段,否则数据库会返回分组中的任意一条记录的非聚合字段值(这里就是第一条40003记录的545)。
  2. 未筛选最新日期:原查询没有限定只获取最新生产日期的记录,所以无法定位到你要的那条数值为7的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:57:28