2015-12-14 32 views
1

我對SQL很陌生。我正在嘗試編寫腳本以獲取特定項目編號的特定事務類型(處置)的最後一次出現(日期)。SQL哪裏不存在 - Mulitple WHERE

表看起來像下面

ID ITEMNO TRANS_DATE TRANS_TYPE 
1  XYZ   12/4/2015 DISPOSITION 
2  ABC   12/6/2015 NEW ITEM 
3  XYZ   12/14/2015 DISPOSITION 

我想ITEMNO「XYZ」是處置2015年12月14日的腳本的結果。

select ITEMNO, TRANS_DATE, TRANS_TYPE from TRANSLOG t 
    where not exists(select tt.Id 
     from TRANSLOG tt 
     where tt.TRANS_TYPE=t.TRANS_TYPE and 
      tt.Id>t.Id 
    ) 
    AND 
    ITEMNO ='XYZ' 
    AND 
    TRANS_TYPE = 'DISPOSITION' 

order by t.TRANS_TYPE 

上述腳本不返回任何結果。

+3

腳本這裏返回結果.. http://sqlfiddle.com/#!9/4f1eaa/1 – JamieD77

+0

一個新的職位嘛起草問題。保持! =) – bonCodigo

回答

0

一種方法是獲取(ItemNo, 'DISPOSITION', MAX(Trans_Date))的列表,然後將其加入到整個表格中。只有DISPOSITION與最近交易日的項目將使它的結果:

SELECT 
    TransLog.ItemNo, 
    TransLog.Trans_Date, 
    TransLog.Trans_Type 
FROM TransLog 
JOIN (
    SELECT ItemNo, Trans_Type, MAX(Trans_Date) AS MostRecent 
    FROM TransLog 
    WHERE ItemNo = 'XYZ' AND Trans_Type = 'DISPOSITION' 
    GROUP BY ItemNo, Trans_Type 
) MaxDates ON 
    TransLog.ItemNo = MaxDates.ItemNo AND 
    TransLog.Trans_Type = MaxDates.Trans_Type AND 
    TransLog.Trans_Date = MaxDates.MostRecent 
WHERE TransLog.Trans_Type = 'DISPOSITION' 
ORDER BY TransLog.Trans_Type 

如果你想要的結果,包括最近的DISPOSITION記錄所有項目,只是刪除從內部查詢的WHERE子句ItemNo = 'XYZ'

有一個工作SQLFiddle here - 感謝@ JamieD77設置它:)

+0

非常感謝您的幫助。有一件事要注意:使用ItemNo時,結果是空白的。我改變它,並使用Itemno_ID,它的工作。 – FalconFlyer

0

如果我們堅持自己的說法,

我試圖寫一個腳本來獲取最後一次出現(日期) 特定項目編號的特定交易類型(處置)。

這意味着一個單個項目編號。所以你不能這樣做嗎?

SELECT ITEMNO, MAX(TRANS_DATE), TRANS_TYPE 
FROM TRANSLOG 
WHERE ITEMNO = 'XYZ' AND TRANS_TYPE = 'DISPOSITION'; 

SQL Fiddle thanks to @JamieD77 again =)

ITEMNO MAX(TRANS_DATE)  TRANS_TYPE 
XYZ  December, 14 2015 00:00:00 DISPOSITION 
+1

我會認爲這也會起作用,但我試過了,它給了我一個錯誤。在某些時候,我想從另一個表中添加其他標準。即查看ItemNo表,並僅返回C_CODE爲空或其他值的項的最後處理日期。 – FalconFlyer

+0

我明白了。錯誤可能是由於列名等原因造成的。如果你需要連接另一個表,那麼是一個連接,並檢查「不存在」的空值。 – bonCodigo