我有一组服务作业的数据,我想识别仍然安装旧部件的客户(部分x),但如果该客户有新的替换部件(部分y),那么我不希望他们填充我的数据。我能描述它的最好方法就是召回。现在每个Job都有一个数字,这个数字总是随着客户的新工作而增加。所以我正在寻找安装的地方(部分x)(部分y)没有。客户都拥有与任何工作相关联的客户编号。在我的下面的例子中,客户(12373,12369,12349)将出现在我的列表中但是客户(12365,不会因为他们在数字更高的工作上升级到y部分#。
任何帮助都会很棒,是sql的新手
答案 0 :(得分:1)
我的版本:)
SELECT
t1.*
FROM
`table` AS t1
LEFT JOIN (
SELECT
`Customer Number`
FROM
`table`
WHERE
`Parts` > 'part x'
) AS t2
ON ( t1.`Customer Number` = t2.`Customer Number` )
WHERE
t1.`Parts` = 'part x'
AND t2.`Customer Number` IS NULL
答案 1 :(得分:0)
一般sql语法。在一些现代DBMS中可以稍微短一点,但当(customerNumber,jobNumber)上的索引存在时,性能应该足够好。
select customerNumber, jobNumber, parts
from theTable t1
where parts='part x' and not exists (
select 1
from theTable t2
where t2.customerNumber = t1.customerNumber
and t2.jobNumber > t1.jobNumber
and t2.parts='part y')