2016-08-23 84 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