如何使用SQL连接获取新数据集?

时间:2010-02-04 17:38:50

标签: sql join

我有以下加入:

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

请fokus在桌子上“tGrundkondition”别名gk1。有一个名为“dDatum”的DATETIME列和一个外键“tLieferant_kLieferant”。

现在我只需要这个表中的最新数据,加上其他东西。我已经使用了MAX(gk1.dDatum)函数,但我仍然获得了gk1的所有条目。我只需要最新的(具有最高的dDate)。实际上我不需要输出日期,只是为了过滤数据。

我正在通过ODBC在Microsoft SQL Server上运行此语句。您还需要进一步的信息吗?

我希望你能帮助我。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您需要使用相关子查询,例如添加以下内容:

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

我不确定这是100%正确,因为我不知道你的表结构,但它应该给你一个想法。

答案 1 :(得分: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上使用了很多

答案 2 :(得分: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