Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQL abfrage mit mehrfachem IN SELECT

Begonnen von ernie55, April 02, 2013, 15:15:46

⏪ vorheriges - nächstes ⏩

ernie55

Grüezi mitenand

Die Ursprünge der Access – DB liegen über 10 Jahre zurück.
Die Struktur der DB darf und kann ich nicht verändern.

Auszug aus der Struktur der relevanten Tabellen
T_Adressen:
ID_Kunde, Nachname, Vorname  ......

T_Vermittlungen: (ca. 100 000 Datensätze)
ID_ Vermittlungen, Datum, Artikelnummer, Lieferant (=ID_Kunde), Abnehmer (=ID_Kunde), Qualität, Preis, .....

Alle Artikel sind Unikate mit eindeutiger Artikelnummer. Seit etwa 2 Jahren kommt es selten vor, dass der gleiche Artikel (mit gleicher Nummer) mehrmals vermittelt wird. Jede Vermittlung eines gleichen Artikels findet zwingend an einem anderen Tag statt.

Die neue SQL-Abfrage soll folgendes Resultat zeigen:

Artikelnummer (eindeutig)
Datum erste Vermittlung
Datum letzte Vermittlung
Lieferant erste Vermittlung
Lieferant letzte Vermittlung
Abnehmer erste Vermittlung
Abnehmer letzte Vermittlung
Qualität, Preis erste Vermittlung
Qualität, Preis letzte Vermittlung

Mir ist klar, dass ich das Problem mittels VBA lösen könnte. Aus Performancegründen ziehe ich jedoch eine SQL Lösung vor. Ich nehme an, dass es etwa 2 IN SELECT Anweisungen braucht.

ACC 07, Win 7

Ich nehme an, eine solche Fragenstellung wurde hier schon mal beantwortet. Ich finde aber den Term nicht um eine solche Diskussion zu finden.



Schöne Grüsse aus dem sonnigen Appenzelllerland

Ernst

ebs17

#1
SELECT
   A.Artikelnummer,
   A.Datum AS D_ErsteVermittlung,
   B.Datum AS D_LetzteVermittlung
FROM
   (
       SELECT
           T1.*
       FROM
           T_Vermittlungen T1
               INNER JOIN
                   (
                       SELECT
                           Artikelnummer,
                           Min(Datum) AS E_Datum
                       FROM
                           T_Vermittlungen
                       GROUP BY
                           Artikelnummer
                   )
                   U1
                   ON T1.Artikelnummer = U1.Artikelnummer
                       AND
                   T1.Datum = U1.E_Datum) A
                       INNER JOIN
                           (
                               SELECT
                                   T2.*
                               FROM
                                   T_Vermittlungen T2
                                       INNER JOIN
                                           (
                                               SELECT
                                                   Artikelnummer,
                                                   Max(Datum) AS L_Datum
                                               FROM
                                                   T_Vermittlungen
                                               GROUP BY
                                                   Artikelnummer
                                           )
                                           U2
                                           ON T2.Artikelnummer = U2.Artikelnummer
                                               AND
                                           T2.Datum = U2.L_Datum) B
                                           ON A.Artikelnummer = B.Artikelnummer


Die Feldliste kannst Du eigenständig erweitern.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

ernie55

Grüezi mitenand

Herzlichen Dank, das ist die Lösung

So wie es aussieht fehlt in der Antwort die letzte Zeile Code  bzw. ist nicht sichtbar.
Ich habe den Code noch ergänzt mit: WHERE B.Datum <> [A].[Datum]

Herzlichen Dank