2010-02-04 68 views
0

我有以下連接:如何用SQL連接獲取最新的數據集?

SELECT l.cFirma AS Lieferant, 
     SUM(la.fEKNetto) AS Verbindlichkeiten, 
     l.kLieferant AS Lieferanten_ID, 
     100 - gk1.fFaktor * 100 AS Grundkondition, 
     MAX(gk1.dDatum) AS Datum 
FROM tBestellung b, tArtikel a, tBestellpos p, tLieferant l, tLiefArtikel la, tGrundkondition gk1 
WHERE 
     CAST('01.01.2010' AS DATETIME) <= CAST(b.dErstellt AS DATETIME) 
     AND b.cType = 'B' 
     AND p.tBestellung_kBestellung = b.kBestellung 
     AND a.kArtikel = p.tArtikel_kArtikel 
     AND l.kLieferant = la.tLieferant_KLieferant 
     AND a.kArtikel = la.tArtikel_kArtikel 
     AND gk1.tLieferant_kLieferant = l.kLieferant 
GROUP BY l.kLieferant, cFirma, gk1.fFaktor 
ORDER BY Verbindlichkeiten DESC, Lieferant 

請在桌子上發展論壇 「tGrundkondition」 別名GK1。有一個名爲「dDatum」的DATETIME列和一個外鍵「tLieferant_kLieferant」。

現在我只需要此表中的最新數據,並加入其他內容。我已經使用了MAX(gk1.dDatum)函數,但我仍然獲得了gk1的所有條目。我只需要最新的(具有最高dDate)。其實我不需要輸出日期,而只需要過濾數據。

我在Microsoft SQL Server上通過ODBC運行此語句。你需要進一步的信息嗎?

我希望你能幫助我。提前致謝。

回答

2

您需要使用相關子查詢,例如添加以下內容:

WHERE gk1.DATUM = (SELECT MAX(SUB.DATUM) FROM tGrundkondition SUB 
    WHERE SUB.tLieferant_kLieferant = l.kLieferant) 

我不知道這是100%正確的,因爲我不知道你的表結構,但它應該給你一個理念。

+0

由於這是它。也感謝其他答覆者。但是這個解決方案返回所有tLieferant的最新條目,而其他asnwers只返回最新的條目(只有一行)。 – c0d3x 2010-02-05 09:52:31

0

嘗試做這樣的事情:

SELECT l.cFirma AS Lieferant, 
     SUM(la.fEKNetto) AS Verbindlichkeiten, 
     l.kLieferant AS Lieferanten_ID, 
     100 - gk1.fFaktor * 100 AS Grundkondition, 
     gk1.dDatum AS Datum 
FROM tBestellung b, tArtikel a, tBestellpos p, tLieferant l, tLiefArtikel la, tGrundkondition gk1 
WHERE 
     CAST('01.01.2010' AS DATETIME) <= CAST(b.dErstellt AS DATETIME) 
     AND b.cType = 'B' 
     AND p.tBestellung_kBestellung = b.kBestellung 
     AND a.kArtikel = p.tArtikel_kArtikel 
     AND l.kLieferant = la.tLieferant_KLieferant 
     AND a.kArtikel = la.tArtikel_kArtikel 
     AND gk1.tLieferant_kLieferant = l.kLieferant 
     AND gk1.dDatum = (SELECT MAX(dDatum) from _ITS TABLE_) 
GROUP BY l.kLieferant, cFirma, gk1.fFaktor 
ORDER BY Verbindlichkeiten DESC, Lieferant 

我不知道這是否適用於SQL SERVER ....但我用了很多DB2

0
SELECT l.cFirma AS Lieferant, 
     SUM(la.fEKNetto) AS Verbindlichkeiten, 
     l.kLieferant AS Lieferanten_ID, 
     100 - gk1.fFaktor * 100 AS Grundkondition, 
     gk1.dDatum AS Datum 
FROM (
     SELECT TOP 1 * 
     FROM tGrundkondition 
     ORDER BY 
       dDatum DESC 
     ) gk1, 
     tBestellung b, tArtikel a, tBestellpos p, tLieferant l, tLiefArtikel la 
WHERE 
     CAST('01.01.2010' AS DATETIME) <= CAST(b.dErstellt AS DATETIME) 
     AND b.cType = 'B' 
     AND p.tBestellung_kBestellung = b.kBestellung 
     AND a.kArtikel = p.tArtikel_kArtikel 
     AND l.kLieferant = la.tLieferant_KLieferant 
     AND a.kArtikel = la.tArtikel_kArtikel 
     AND gk1.tLieferant_kLieferant = l.kLieferant 
GROUP BY l.kLieferant, cFirma, gk1.fFaktor 
ORDER BY Verbindlichkeiten DESC, Lieferant 
相關問題