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

基于条件移除物料分组的SQL查询优化需求

解决方案:筛选仅含DOCK位置的物料记录

要实现你要的逻辑,核心是先定位那些「脚踏两条船」的物料——也就是同时有DOCK位置和符合111-111-111-11格式非DOCK位置的物料,然后把这些物料的所有记录全删掉,只留那些所有位置都是DOCK的物料。

假设你的源表叫inventory,包含字段project_id(指定项目ID)、customer、material、license_plate、location,可以这么写SQL:

WITH excluded_materials AS (
    SELECT material
    FROM inventory
    WHERE project_id = 'TARGET_PROJECT' -- 替换成你要查询的项目ID
    GROUP BY material
    HAVING 
        -- 该物料存在至少一条DOCK位置的记录
        SUM(CASE WHEN location = 'DOCK' THEN 1 ELSE 0 END) > 0
        -- 同时存在至少一条符合格式的非DOCK位置记录
        AND SUM(CASE WHEN location != 'DOCK' AND location REGEXP '^[0-9]{3}-[0-9]{3}-[0-9]{3}-[0-9]{2}$' THEN 1 ELSE 0 END) > 0
)
SELECT customer, material, license_plate, location
FROM inventory
WHERE 
    project_id = 'TARGET_PROJECT'
    AND material NOT IN (SELECT material FROM excluded_materials)
    AND location = 'DOCK'; -- 确保最终只保留DOCK位置的记录

关键点说明:

  • 排除逻辑:通过CTEexcluded_materials分组检查每个物料的位置情况,把同时满足两个条件的物料标记为需要排除的对象。
  • 正则兼容:如果你的数据库不支持REGEXP(比如SQL Server),可以把正则条件换成LIKE模式:
    location LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9]'
    
  • 最终过滤:最后加上location = 'DOCK'是为了确保结果里只有DOCK位置的记录——毕竟有些物料可能全是符合格式的非DOCK位置,这类也不是我们要的,直接过滤掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:52:05