PDA

Vollständige Version anzeigen : max/aktuellster Datensatz ermitteln usw.


Erwin S04
21.01.2008, 13:53
Hallo zusammen,

ich habe das Problem aus einer komplexen Tab die 30 Fahrzeuge mit deren aktuellsten Datensatz heraus zu filtern und anschließend unter einigen Bedingungen etwas anzeigen zu lassen.
Im Detail:
Ich habe :
Tab1 : besteht aus [Stkz] [Fhzg] [Datum] usw (mehrere hundert Datensätze)
Tab 2 : [Fhzg] [Datum] [Datum_2] [Frist] usw (mehrere hundert Datensätze)
(Es sind aber nur 30 verschiedene [Fhzg])
Ich benötige:
Aus Tab 1 eine Abfrage, die zu jedem [Fhzg] mit der [Stkz“313“] den aktuellsten Datensatz ausgibt
Aus Tab 2 eine Abfage, die zu jedem [Fhzg] den aktuellsten Datensatz anzeigt, unter der Bedingung dass wenn [Datum_2] leer ist, diesen Datensatz zu nehmen. Wenn aber [Datum_2] nicht leer ist, den aktuellsten Datensatz zu nehmen bei dem [Frist] nicht leer ist.

Ich hab da was umständlich gebastelt mit einer Abfrage auf die Abfrage (Funktion Max) usw.
Doch leider klappt es hinten und vorne nicht.
Ich hoffe einer von euch kann mir weiter helfen.

lalo
21.01.2008, 17:40
Hallo Erwin,

Deine erste Frage lässt sich noch leicht lösen:
"Select Stkz, Fhzg, Datum from Tab1 where stkz = '313' and datum = select max(datum) from tab1 where stkz = '313'"

Das 2. ist nicht so trivial wenn man keine Ifs im SQL nehmen will:

" das kommt davon " . . . wenn man die Tabellen nicht richtig normalisiert. Es besteht keine funktionale Unabhängikeit zwischen den einzelnen Spalten. Du solltest daher Dein Datenmodell mal offenlegen (was bedeutet es wenn die Datumsspale 1 / 2 leer ist) um daraus ein besseres Datenmodell zu machen.
Wie Du sagst ist Dein Entwurf umständlich und wird auf Dauer Probleme machen.

Zuri
21.01.2008, 22:08
Hallo Erwin S04,

das Problem mit dem Datum ist interessant.

Kannst Du uns vielleicht einmal einen Beispieldatensatz schicken, damit man sich die Daten etwas besser vorstellen kann?

Was verbirgt sich hinter dem Datum? Ist das ein Buchungs- oder Bearbeitungsdatum?

Handelt es sich um Baujahrangaben zu den Fahrzeugen? Wenn ja würde ich folgendes tun . . .

Um ein Fahrzeug zu identifizieren brauche ich doch eigentlich den Hersteller, den Typ und das Ab- und Bis-Datum? Alle Fahrzeuge haben ein Ab-Datum und auch eventuell ein Bis-Datum. Es gibt aber auch Fahrzeuge, die heute noch hergestellt werden. Bei diesen Fahrzeugen habe ich dann nur ein Ab-Datum. Wenn ich diese Angaben gruppiere, kann ich natürlich keinen maximalen Wert nehmen, weil z. B. die Spalte 2 mit dem Bis-Datum leer sein kann.

Hast Du ein Ab- und ein Bisdatum? Wenn ja, würde ich alle Fahrzeuge die kein Bisdatum haben, mit einem Bis-Datum versehen z. B. mit 2008.

Die Datumsangaben würden dann z. B. so aussehen:

1972 bis 1996
1982 bis 2001
1999 bis 2008

Das könnte man dann Gruppieren. Du nimmst beim Abdatum den mininalen Wert und beim Bis-Datum den maximalen Wert. Du hast dann den ganzen Gültigkeitszeitraum wann das Fahrzeug hergestellt worden ist.

Viele Grüße aus Stuttgart

von

Zuri

:rolleyes:

Anne Berg
21.01.2008, 22:33
@Bernd: ganz so trivial ist auch die erste Frage nicht:die 30 Fahrzeuge mit deren aktuellsten Datensatz heraus zu filtern Daher würde ich die Abfrage folgendermaßen anlegenSELECT tab1.StKz, tab1.Fhzg, max(tab1.datum) as maxdat
FROM tab1
WHERE (((tab1.StKz)="313") )
Group By stkz,fhzg;


@Zuri: Wann hat es dich denn nach Stuttgart verschlagen? :eek:

lalo
22.01.2008, 07:14
@Anne
Danke für den Hinweis, war auf dem falschen Dampfer !