MySQL: Letzten Kassenstand abrufen!

punisher86

Mitglied
Hallo Leute,

ich programmiere gerade an einem kleinem WarenWirtschaftssystem. Nun arbeite ich an dem Kassensturz und hab da ein paar query-probleme. Die "Kassenstand"-Tabelle sieht wie folgt aus:

Code:
Datum                                Kassenstand
------------------------|------------------------------
.............
10.02.2009 08:05:21     | 1500,00
10.02.2009 09:15:21     | 1550,00
10.02.2009 10:35:21     | 2540,00
10.02.2009 11:12:21     | 2550,00
10.02.2009 12:45:21     | 3214,00
11.02.2009 10:45:21     | 1500,00
11.02.2009 10:55:21     | 2400,00
11.02.2009 11:45:21     | 3510,00
11.02.2009 12:40:21     | 4572,00
............

In der Tabelle sind halt alle Kassenstände jeden Tages drin und den Kassenstand des aller letzten kann ich ganz einfach abrufen mit:

Code:
SELECT Kassenstand FROM Kassenstand WHERE Datum=\"" + Datum + "\";

Soweit so gut! ;) Nun möchte ich aber z.B. den Kassenbestand vom 10.02.2009 abrufen (also quasi den letzten Datensatz vom 10.02 aus der Tabelle) nur weiß ich nicht wie. Ich habe es mal so gelöst:

Code:
SELECT Datum, MAX(Kassenstand) FROM kassenstand WHERE Datum LIKE '%10.02.2009%';

Funktioniert soweit auch ganz gut, allerdings kann es ja sein das aus der Kasse etwas rausgenommen wird z.B. für Nachnamepakete etc. und die Kasse am Ende weniger Bargeld enthält wie am Anfang des Tages. Dann trifft diese query nämlich nicht mehr zu :suspekt:

Nun versuch ich verzweifelt spezifisch den letzten Datensatz des Tages zu bekommen. Ist dieses überhaupt so ohne weiteres möglich?

MFG
 
Das hab ich auch schon ausprobiert, aber da ruft der mir nur das max datum mit dem ersten kassenstand ab :suspekt: oder ich mache was falsch :rolleyes:
 
Da machst Du was falsch.

Wie Bernd1984 geschrieben hat: MAX (datum) ist der richtige Wege. Also:

select * from tabelleIrgendwas where max(meinDatum);

Es kann sein, dass Dein Datumsform nicht korrekt ist. Dann wandle das Datum gleich in nen UNIXTimestamp um. Achja: Mit dem LIKE würde ich äußerst vorsichtig umgehen. Langsam und führt unbedacht eingesetzt zu falschen Ergebnissen.

Chris
 
Was genau verstehst Du daran nicht?

Nimm das MAX(Kassenstand) da raus, das willst Du doch gar nicht haben, und sortiere absteigend nach Datum. Der erste gefundene Datensatz ist doch das, was Du willst. Kannst Du dann per LIMIT-Klausel auch gleich auf einen Datensatz im Ergebnis einschränken.

LG
 
Theoretisch gedacht würde es ja so funktionieren:
Code:
SELECT Kassenstand FROM Kassenstandtabelle WHERE MAX(Datum);

Allerdings geht das net wegen:
Code:
Invalid use of group function

Das mit den sortieren und dem Limit kann ich nicht ganz nachvolziehen, warum auch immer :rolleyes: Wahrscheinlich bin ich zu blöd oder hab ne Denkblockade :suspekt:
 
Hi,

Theoretisch gedacht würde es ja so funktionieren:
Code:
SELECT Kassenstand FROM Kassenstandtabelle WHERE MAX(Datum);

naja, abgesehen davon, dass die Query so falsch ist, wie Du ja bemerkt hast, warum willst Du denn jetzt wieder das höchste Datum haben. Ich dachte, Du willst den letzten Eintrag eines bestimmten Tages.
In Worten: Suche alle Datensätze eines bestimmten Datums und sortiere das Ergebnis absteigend nach Datum (da dann der Datensatz mit dem höchsten Datumswert an erster Stelle steht). Komm schon, so schwer ist das doch nicht...

oder hab ne Denkblockade

Hmm, scheint so. Vielleicht solltest Du'n paar mal um den Block rennen oder Dir einen ordentlichen Kaffee reinpfeifen. Wahlweise auch beides. :)

LG
 

Neue Beiträge

Zurück