Как получить новейший набор данных с соединением SQL? - PullRequest
0 голосов
/ 04 февраля 2010

У меня есть следующее соединение:

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. Существует столбец DATETIME с именем «dDatum» и внешний ключ «tLieferant_kLieferant».

Теперь мне нужны только самые последние данные из этой таблицы, объединенные с другими материалами. Я уже использовал функцию MAX (gk1.dDatum), но я все еще получаю все записи gk1. Мне нужно только самое последнее (с самой высокой датой). На самом деле мне не нужно выводить дату, а только фильтровать данные.

Я запускаю этот оператор на Microsoft SQL Server через ODBC. Вам нужна дополнительная информация?

Надеюсь, вы мне поможете. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

Вам необходимо использовать коррелированный подзапрос, например, добавить следующее:

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

Я не уверен, что это на 100% правильно, потому что я не знаю структуру вашего стола, но это должно дать вам представление.

0 голосов
/ 04 февраля 2010
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
0 голосов
/ 04 февраля 2010

Попробуйте сделать что-то вроде этого:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...