2016-08-23 49 views
-1

我有一组服务工作的数据,我想确定仍安装旧部件的客户(部分x),但如果该客户有新的更换部件(部分y),那么我不希望他们填充我的数据。我可以用它来描述它的最好方式就是召回。现在每个工作都有一个数字,这个数字随着整个客户的新工作而不断增加。所以即时通讯寻找(部分x)已安装(部分y)没有。客户都有一个与任何工作关联的客户编号。在下面的客户(12373,12369,12349)我的例子都会出现在我的名单,但客户(12365上,不会因为他们升级到Y部在数值上较高的工作#。获得最新的记录,如果*

example table

任何帮助将是巨大的,新来的sql

+3

标记使用的dbms。 (答案可能取决于它是哪种产品。) – jarlh

+0

同时添加预期结果! – jarlh

+1

“部分w”是否也是新的替换部分?你是否想要所有拥有'部分x'但不是更高部分信件的工作的客户? – tiomno

回答

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') 
+0

真棒谢谢你! – BrettF

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