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

SQL Server 从wohead表获取符合条件的各part_code最新工单记录

原SQL问题定位

你编写的语句返回全量记录,核心是四个逻辑错误导致过滤、关联完全失效:

  • 关联条件存在无效恒等式:wh1.part_code = wh1.part_code 永远为真,没有将wh1的part_code和wh2做匹配,JOIN过程无法过滤不匹配的行
  • 子查询聚合维度错误:把wo_numb、run_number、run_date全部加入GROUP BY分组维度,此时MAX(run_date)计算的结果就是每行自身的run_date,根本没有实现“按part_code维度取最大日期”的聚合目标
  • 日期过滤写法错误:wh1.run_date > 1 / 1 / 20 在多数SQL引擎中会被解析为数学除法运算(计算结果为0.05),而非2020年1月1日的日期值,导致日期过滤完全失效
  • 过滤时机不合理:所有业务过滤条件放在外层JOIN完成后才执行,既放大了中间计算的数据量,也容易因为关联逻辑错误漏过滤不符合要求的行
修正后的实现方案

方案1:窗口函数实现(推荐,逻辑清晰易维护)

SELECT 
  part_code,
  run_date,
  wo_numb,
  run_number,
  cost_ctr,
  wo_status
FROM (
    SELECT
      wh.part_code,
      wh.run_date,
      wh.wo_numb,
      wh.run_number,
      wh.cost_ctr,
      wh.wo_status,
      ROW_NUMBER() OVER (
        PARTITION BY wh.part_code
        ORDER BY wh.run_date DESC
      ) AS record_rank
    FROM wohead wh
    WHERE
      wh.cost_ctr = '20'
      AND wh.wo_status = 'C'
      AND wh.part_code IN ('7DADP0312PL03', '7DADP0178PL03')
      AND wh.run_date > '2020-01-01'
) filter_result
WHERE record_rank = 1
ORDER BY part_code

方案2:聚合关联实现(适配不支持窗口函数的老旧数据库)

SELECT
  wh1.part_code,
  wh1.run_date,
  wh1.wo_numb,
  wh1.run_number,
  wh1.cost_ctr,
  wh1.wo_status
FROM wohead wh1
INNER JOIN (
  SELECT
    part_code,
    MAX(run_date) AS max_valid_run_date
  FROM wohead
  WHERE
    cost_ctr = '20'
    AND wo_status = 'C'
    AND part_code IN ('7DADP0312PL03', '7DADP0178PL03')
    AND run_date > '2020-01-01'
  GROUP BY part_code
) wh2
  ON wh1.part_code = wh2.part_code
  AND wh1.run_date = wh2.max_valid_run_date
  AND wh1.cost_ctr = '20'
  AND wh1.wo_status = 'C'
ORDER BY wh1.part_code

上述SQL执行后将完全匹配你预期的查询结果:

  • 对7DADP0178PL03,符合基础过滤条件的记录仅1条(12/29/2020 成本中心20、状态C),即为该物料下最新的有效工单
  • 对7DADP0312PL03,2019年的记录因日期早于2020-01-01被过滤,剩余符合条件的记录中2/16/2021的工单为日期最新的有效记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 22:15:09