tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
291
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    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 :
    1
    
    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 :
    1
    
    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

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

    MFG
     

  2. #2
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo punisher86,

    warum nimmst du nicht einfach Max(Datum)?
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  3. #3
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Das hab ich auch schon ausprobiert, aber da ruft der mir nur das max datum mit dem ersten kassenstand ab oder ich mache was falsch
     

  4. #4
    XChris XChris ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Ort
    Weimar
    Beiträge
    373
    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
     

  5. #5
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Allerdings "meinDatum" sollte LIKE "string" sein. Das würde dann aber so nicht gehen

    mfg
     

  6. #6
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    sortier doch noch absteigend nach dem Datum und wähle nur einen Datensatz per Limit aus.

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  7. #7
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Wie meinst du das genau?
     

  8. #8
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    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
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  9. #9
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Theoretisch gedacht würde es ja so funktionieren:
    Code :
    1
    
    SELECT Kassenstand FROM Kassenstandtabelle WHERE MAX(Datum);

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

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

  10. #10
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von punisher86 Beitrag anzeigen
    Theoretisch gedacht würde es ja so funktionieren:
    Code :
    1
    
    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...

    Zitat Zitat von punisher86 Beitrag anzeigen
    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
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  11. #11
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Hehe mit dem Kaffee hab ich erledigt, das mit dem um Block rennen muss ich mir noch ma überlegen xD

    Mit dem höchsten Datum meinte ich das so:

    Das Datumformat sieht so aus:

    Code :
    1
    2
    
    10.02.2009 12:45:21 <--- man beachte das die Uhrzeit da mit drinne steckt :)
    10.02.2009 18:22:21

    Das heißt mit Max sucht der mit den 2. Datensatz raus, weil die Uhrzeit später ist.
    Jetzt muss ich ihm ja nur noch sagen in welchen Tag er suchen soll, deswegen habe ich mit LIKE gearbeitet um in einem string ein Datum zu übergeben(10.02.2009) und dann sucht der aus dem Tag den letzten Datensatz raus

    Soweit meine Vorstellung
     

  12. #12
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Zitat Zitat von punisher86 Beitrag anzeigen
    Soweit meine Vorstellung
    Funktioniert so aber nunmal nicht, wie Du ja gesehen hast. Versuch es also mal mit meinem Ansatz.

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  13. #13
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Alles klar dann probier ich das mit deiner Sortier-Variante Ich danke dir und poste dann nachher die Lösung um zu closen Muss nun erst zum Kunden

    LG
     

  14. #14
    punisher86 punisher86 ist offline Mitglied Bronze
    Registriert seit
    Feb 2007
    Beiträge
    28
    Hallo Leute,

    habe nun die Lösung. So klappt es wunderbar:

    Code :
    1
    
    SELECT Kassenstand FROM Entwicklung.Kassenstand WHERE Datum LIKE('%13.01%') ORDER BY Datum DESC Limit 1;

    Kann geclosed werden
     

Ähnliche Themen

  1. MySQL: Getriggerte Operation abrufen
    Von raikkonentk im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 23.12.10, 12:53
  2. MySQL Einzelne Einträge abrufen
    Von dsNDesign im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 28.02.09, 19:11
  3. Array in MySQL speichern und abrufen
    Von Lachkopf im Forum PHP
    Antworten: 2
    Letzter Beitrag: 11.05.08, 21:48
  4. Daten von MySQL Datenbank mit AJAX abrufen
    Von forsterm im Forum Javascript & Ajax
    Antworten: 21
    Letzter Beitrag: 28.06.06, 23:56
  5. MySQL Fehlermeldung mit PHP abrufen?
    Von Moartel im Forum PHP
    Antworten: 1
    Letzter Beitrag: 23.08.01, 15:08