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
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
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
ja, kannst du ruhig weiterleiten. X-D
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.