Letzten Datensatz innerhalb eines Datums

erz55

Benutzer
Beiträge
6
Hallo,
ich hoffe mir kann hier geholfen werden.
Ich habe folgende DB :
DB.PNG

Ü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)

db1.PNG

Wäre nett, wenn ihr mir weiterhelfen könntet.
Grüsse Bernd
 
Werbung:
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)
 
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
 
Diese SQL funktioniert:
$abfrage = "SELECT `id`, `bezug`, `momentanverbrauch`, `einspeisung`, `date`, `timestamp` FROM data WHERE date ORDER BY timestamp DESC LIMIT 1 ";
sql.PNG

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:
Diese SQL funktioniert:
..

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.
Ja, gleich falsch.

Du gibst den Parameter vom Datepicker auf das Limit, nicht auf die Datumsspalte.
 
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.
 
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.
 
Dass die andere Abfrage funktioniert, würde ich bezweifeln oder ein weiterer Teil von mysql mystery...
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".
 
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.
 
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
 
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
 
Werbung:
Zurück
Oben