Doppelte Einträge weglassen über 2 Spalten, aber von allen gefundenen Einträge alle Spalten anzeige

halloICKEbins2

Neuer Benutzer
Beiträge
3
Mahlzeit,

ich suche eine Möglichkeit auf zwei Spalten (Datum, Uhrzeit) nur das erste Ergebnis auszugeben (alse keine Doppelten) aber alle Spalten der Ergebnisse.

Bsp.:

ID, Datum, Uhrzeit, Logtext
-------------------------------------
1, 2018-09-03, 12:00:00, blabla
2, 2018-09-03, 12:00:00, blabla1
3, 2018-09-03, 12:00:00, blabla2
4, 2018-09-03, 12:00:00, blabla3
5, 2018-08-03, 12:00:00, blabla1
6, 2018-10-03, 12:00:00, blabla1
7, 2018-10-03, 12:00:00, blabla2

Erwartetes Ergebnis:

1, 2018-09-03, 12:00:00, blabla
5, 2018-08-03, 12:00:00, blabla1
6, 2018-10-03, 12:00:00, blabla1
 
Werbung:
Code:
test=*# select * from "halloICKEbins2" ;
 id |  datum  | uhrzeit  | logtext  
----+------------+----------+----------
  1 | 2018-09-03 | 12:00:00 |  blabla
  2 | 2018-09-03 | 12:00:00 |  blabla1
  3 | 2018-09-03 | 12:00:00 |  blabla2
  4 | 2018-09-03 | 12:00:00 |  blabla3
  5 | 2018-08-03 | 12:00:00 |  blabla1
  6 | 2018-10-03 | 12:00:00 |  blabla1
  7 | 2018-10-03 | 12:00:00 |  blabla2
(7 Zeilen)
test=*# select id, datum, uhrzeit, logtext from (select *, row_number() over (partition by datum,uhrzeit order by id) from "halloICKEbins2" order by id) bla where row_number = 1;
 id |  datum  | uhrzeit  | logtext  
----+------------+----------+----------
  1 | 2018-09-03 | 12:00:00 |  blabla
  5 | 2018-08-03 | 12:00:00 |  blabla1
  6 | 2018-10-03 | 12:00:00 |  blabla1
(3 Zeilen)

test=*#

Mahlzeit.
 
einen hab ich noch:

Code:
test=*# select distinct on (datum, uhrzeit) * from "halloICKEbins2" order by datum, uhrzeit, id;
 id |  datum  | uhrzeit  | logtext  
----+------------+----------+----------
  5 | 2018-08-03 | 12:00:00 |  blabla1
  1 | 2018-09-03 | 12:00:00 |  blabla
  6 | 2018-10-03 | 12:00:00 |  blabla1
(3 Zeilen)

test=*#
 
na gut, einen hab ich noch:

Code:
test=*# select * from "halloICKEbins2" where id in (select id from ((select min(id) id, to_timestamp(datum || ' ' ||uhrzeit, 'yyyy-mm-dd hh24:mi:ss') from  "halloICKEbins2" group by 2)) bla);
 id |  datum  | uhrzeit  | logtext  
----+------------+----------+----------
  1 | 2018-09-03 | 12:00:00 |  blabla
  5 | 2018-08-03 | 12:00:00 |  blabla1
  6 | 2018-10-03 | 12:00:00 |  blabla1
(3 Zeilen)

test=*#
 
Würde gerne die 2 Variante bevorzugen, da ich nicht alle Spalten explizit nennen muss. Leider geht es bei mir nicht.

Bei folgendem Quellcode
PHP:
while ($row=mysqli_fetch_array($result))
       {
         echo "<tr>";
           echo "<td>".$row[0]."</td>";
         echo "</tr>";
       }

kommt die nachfolgende Fehlermeldung (Zeile 135 ist "while ($row ...")
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in test.php on line 135
 
Man sollte aber generell (in produktivem Code) immer alle Spalten wirklich nennen und aufzählen, das vermeidet spätere Fehler.

Deine gezeigte Fehlermeldung in PHP, hat nix mit der Datenbank zu tun.
 
PS.: warum trennst Du Datum und Uhrzeit? Das ist doch sicher ein Timstamp, die zwei Werte gehören zusammen. Passende Datentypen existieren.
 
Werbung:
Fehlerbehandlung in PHP? Bitte beschäftige Dich damit. DISTINCT ON (...) könnte zu den ca. 1 Million Dingen gehören, die MySQL nicht kann. Sollte also schon einen Eintrag liefern, aber einen Fehler.
 
Zurück
Oben