PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL-Abfrage


wintermute
2005-08-04, 12:10:39
Hi,
ich muss eine SQL-Abfrage realisieren, komme aber nicht weiter.
Die Tabelle sieht so in etwa aus:
Guid, Seriennummer, Entscheidung1, Entscheidung2, DatumEntscheidung
Beispiel:
Guid, 123, Kauf, Barzahlung, 01.01.2005
Guid, 123, Kauf, Barzahlung, 01.02.2005
Guid, 123, Verkauf, Barzahlung, 01.03.2005
Guid, 345, Kauf, Barzahlung, 01.01.2005
Guid, 345, Kauf, Barzahlung, 01.02.2005
Guid, 345, Verkauf, Barzahlung, 01.04.2005
Guid, 678, Kauf, Barzahlung, 01.01.2005
Guid, 678, Storno, Barzahlung, 01.02.2005
Guid, 678, Verkauf, Barzahlung, 01.03.2005

Ich benötige eine Abfrage, die mir jede Seriennummer ausgibt, bei der als jüngste (letzte) Entscheidung z.Bsp Storno ist.
Vielen Dank
wintermute

/dev/NULL
2005-08-04, 12:27:52
was jetzt in deinem Fall ja keine wäre, oder? Gib mal nen Beispiel wo du ein Ergebniss erwarten tätest..

wintermute
2005-08-04, 12:36:59
Guid, 678, Kauf, Barzahlung, 01.01.2005
Guid, 678, Storno, Barzahlung, 01.02.2005
Guid, 678, Verkauf, Barzahlung, 01.03.2005
Guid, 678, Storno, Barzahlung, 01.04.2005

Wenn es hier um die Entscheidung Storno ginge, darf die Abfrage einen Treffer für "678" zurückgeben (Storno vorhanden und war letzte Entscheidung).
Wenn es um die Entscheidung Verkauf ginge, dann kein Treffer (Verkauf vorhanden, aber war nicht letzte Entscheidung).
Ich hoffe, es ist jetzt verständlicher.
Merci
wintermute

ravage
2005-08-04, 13:00:12
Uhm Normalisierung (http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap4.htm)?

Mit einer einzigen SQL Abfrage wirst du da nicht weit kommen.

/EDIT: Oder doch... *deutet nach unten*

m@ssa
2005-08-04, 13:00:46
Dieser Select gibt dir die seriennummer nur aus, wenn die letzte Entscheidung Storno lautet, hoffe das war was du wolltest...

SELECT seriennummer
FROM tabelle
WHERE entscheidung1 like("Storno")
AND datumentscheidung = (SELECT max(datumentscheidung) FROM tabelle);



like('Storno')

kannst du evtl. durch

= 'Storno'

ersetzen


Gruß

massa

wintermute
2005-08-04, 13:15:12
SELECT seriennummer
FROM tabelle
WHERE entscheidung1 like("Storno")
AND datumentscheidung = (SELECT max(datumentscheidung) FROM tabelle);


Das würde mir nur ein Datum aus der ganzen Tabelle bringen. Ich brauche das für jede Seriennummer.
Umgangssprachlich ausgedrückt:
Gib mir jede Seriennummer, bei der als letzte Entscheidung die Entscheidung "Storno" getroffen wurde.
cu
wintermute

Gast
2005-08-04, 13:16:33
SELECT t1.seriennummer
FROM tabelle t1
WHERE t1.entscheidung1 like("Storno")
AND t1.datumentscheidung = (SELECT max(t2.datumentscheidung) FROM tabelle t2 WHERE t2.seriennummer=t1.seriennummer);

der threadersteller will ja nicht nur die seriennummer die zuletzt storniert worden ist.

wintermute
2005-08-04, 13:21:50
SELECT t1.seriennummer
FROM tabelle t1
WHERE t1.entscheidung1 like("Storno")
AND t1.datumentscheidung = (SELECT max(t2.datumentscheidung) FROM tabelle t2 WHERE t2.seriennummer=t1.seriennummer);.

Danke, das sieht sehr gut aus. :)
Wenn niemand einen Fehler findet (ich muss mal testen) war es das
Merci
wintermute

noid
2005-08-04, 13:25:43
Uhm Normalisierung (http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap4.htm)?

[..]

ich finde das design auch sehr mäßig. sieht nicht durchdacht aus...

wintermute
2005-08-04, 13:35:14
ich finde das design auch sehr mäßig. sieht nicht durchdacht aus...
Falls ihr darauf besteht, leite ich eure Kritik gerne an die Entwickler weiter. :biggrin:
Die Abfrage scheint auf jeden Fall zu funktionieren.
cu
wintermute

noid
2005-08-04, 13:36:55
ja, kannst du ruhig weiterleiten. X-D