Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Letzten Datensatz innerhalb eines Datums

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von erz55, 13 September 2021.

  1. erz55

    erz55 Benutzer

    Hallo,
    ich hoffe mir kann hier geholfen werden.
    Ich habe folgende DB :
    [​IMG]
    Über einen Datepicker und der Abfrage:
    $abfrage = "SELECT `id`, `bezug`,`momentanverbrauch`, `einspeisung`, `date`, `timestamp` FROM data WHERE date = '". mysql_real_escape_string($Datumsuche) ."' ";
    werden alle 4 Datensätze ausgegeben.
    Ich bräuchte aber immer nur jeweils den letzten Datensatz eines Datums (hier z.B. vom 13.09.2021)

    [​IMG]
    Wäre nett, wenn ihr mir weiterhelfen könntet.
    Grüsse Bernd
     
  2. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Einfach die Tabelle mit "order by" sortieren, und ein DESC anhängen:

    Ich erstelle erstmal irgendeine Tabelle:
    Code:
    create table a(id serial primary key, datum date not null);
    
    Ich füge ein paar Werte ein:
    Code:
    insert into a(datum) values ('2021-01-01');
    insert into a(datum) values ('2021-01-05');
    insert into a(datum) values ('2021-01-03');
    
    Ich selecte alle Datensätze aus der Tabelle, sortiere sie absteigend, und limitiere es auf einen Datensatz:
    Code:
    select * from a order by datum desc limit 1;
    
    Resultat:
    Code:
     id |   datum
    ----+------------
      2 | 2021-01-05
    
    Also wählt sich der Datensatz mit dem neuestem Datum, obwohl ein älterer auch in der Tabelle ist, was die eigentliche Sortierung (aufsteigend) umkehrt, wegen dem DESC, und absteigend sortiert.

    EDIT: jetzt weiß ich endlich, woher unser mr. Elephant immer so tolle Tabellen als Resultat hinbekommt xD (einfach aus der Maschine rauskopieren)
     
  3. erz55

    erz55 Benutzer

    Danke für die Antwort.
    ich habe die Abfrage jetzt so:
    $abfrage = "SELECT `id`, `bezug`, `momentanverbrauch`, `einspeisung`, `date`, `timestamp` FROM data WHERE date ORDER BY timestamp DESC LIMIT 1 ";
    Die Ausgabe bringt mir jetzt mithilfe des "timestamp" den letzten Datensatz innerhalb eines Tages, also den 13.09. Das wäre ja in Ordnung.
    Das Problem ist jetzt, dass der Datepicker nicht mehr funktioniert. Nehme ich den Datepicker wieder in die Abrage rein ('". mysql_real_escape_string($Datumsuche) ."' ,
    bekomme ich keine Ergebnisse mehr. Ich möchte aber über den Datepicker ein bestimmtes Datum auswählen und davon den letzen Datensatz(letzter timestamp) ausgeben.
    Vielleicht ist das ja auch gar nicht möglich.
    Grüsse
     
  4. akretschmer

    akretschmer Datenbank-Guru

    im zuletzt gezeigten SQL ist ein Fehler drin, die WHERE-Condition ist unvollständig. Vermutlich ist das auch exakt Dein Problem.
     
  5. erz55

    erz55 Benutzer

    Diese SQL funktioniert:
    $abfrage = "SELECT `id`, `bezug`, `momentanverbrauch`, `einspeisung`, `date`, `timestamp` FROM data WHERE date ORDER BY timestamp DESC LIMIT 1 ";
    [​IMG]
    Hol ich das Datum mit dem Datepicker
    $abfrage = "SELECT `id`, `bezug`,`momentanverbrauch`, `einspeisung`, `date`, `timestamp` FROM data WHERE date ORDER BY timestamp DESC LIMIT 1= '". mysql_real_escape_string($Datumsuche) ."' ";
    geht nichts mehr. Die WHERE-Condition ist doch die gleiche.
    Versteh ich nicht.
     
    Zuletzt bearbeitet: 14 September 2021 um 09:29 Uhr
  6. dabadepdu

    dabadepdu Datenbank-Guru

    Ja, gleich falsch.

    Du gibst den Parameter vom Datepicker auf das Limit, nicht auf die Datumsspalte.
     
  7. dabadepdu

    dabadepdu Datenbank-Guru

    Dass die andere Abfrage funktioniert, würde ich bezweifeln oder ein weiterer Teil von mysql mystery...
     
  8. akretschmer

    akretschmer Datenbank-Guru

    vermutlich sagt sich MySQL: hey, da ist ja ein Datum in der Spalte, paßt...
     
  9. dabadepdu

    dabadepdu Datenbank-Guru

    Na könnte selbst bei mSQL schon etwas schlauer sein, so eine Art impliziter Boolean Cast z.B.:
    Datum is null = false
    Datum is not null = true
    Also finden wir ein Ergebnis, hurra!

    Man könnte natürlich auch mal in PHP die Fehler begutachten. In diesem Fall und grundsätzlich. Könnte ja sein, dass nicht nur kein Datensatz rauskommt, sondern noch mehr, Fehlermeldungen eben. Dann müsste man nicht so "lustig" spekulieren.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Code:
    mysql> select 1 from dual where current_date;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    1 row in set (0,00 sec)
    
    edb=*# select 1 where current_date;
    FEHLER:  Argument von WHERE muss Typ boolean haben, nicht Typ date
    LINE 1: select 1 where current_date;
                           ^
    edb=*#
    
    Tja. MySQL eben.
     
  11. erz55

    erz55 Benutzer

    Funktioniert-- siehe Bild

    edb=*# select 1 where current_date;
    FEHLER: Argument von WHERE muss Typ boolean haben, nicht Typ date
    LINE 1: select 1 where current_date;
    ^
    Bei WHERE handelt es sich nicht um Typ" date" sondern um Spaltenname "date".
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Ja, es funktioniert in MySQL, weil MySQL Deinen Fehler nicht erkennt. Es erkennt auch andere Fehler nicht (fehlende Gruppierung bei Aggregation z.B.).

    Noch einmal zum langsammen mitlesen:

    MySQL erkennt logische Fehler in Abfragen NICHT, liefert statt einer Fehlermeldung ein Zufallsresultat. Daher rate nicht nur ich vor dem Einsatz dieser buggy Software schlicht ab.
     
  13. erz55

    erz55 Benutzer

    OK, das sagt mir also, dass ich XAMPP mit MySQL nicht nutzen soll, bei einer richtigen Abfrage aber wäre es möglich.
    Da werde ich das mal sein lassen. Hab schon lange genug damit rumprobiert.
    Trotzdem danke für eure Hilfe.
    Grüsse
     
  14. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    Xampp und Postgre-SQL funktioniert einwandfrei, hatte ich auch im Einsatz, man muss nur die MySQL Extension kommentieren, und PgSQL entkommentieren.

    Bevor du die ganze Sache aufgibst, würde ich dir empfehlen, dass du mal PostgreSQL herunterlädst, installierst, und dich, bevor du direkt das Ganze mit PHP verknüfst, die Basis von SQL (und PostgreSQL) lernst.

    Habe auch mal klein angefangen :D

    EDIT:
    Link zu PostgreSQL:
    PostgreSQL
     
  15. erz55

    erz55 Benutzer

    Danke für den Tipp. Werds mal versuchen. Mit 66 bleiben eben nicht mehr soviel hängen :D
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden