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

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

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von halloICKEbins2, 9 März 2018.

  1. halloICKEbins2

    halloICKEbins2 Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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=*#
    
     
  5. halloICKEbins2

    halloICKEbins2 Neuer Benutzer

    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 ...")
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    PS.: warum trennst Du Datum und Uhrzeit? Das ist doch sicher ein Timstamp, die zwei Werte gehören zusammen. Passende Datentypen existieren.
     
  8. halloICKEbins2

    halloICKEbins2 Neuer Benutzer

    Aber warum bekomme ich kein Eintrag:

    PHP:
    $sql "SELECT DISTINCT on (Datum, Uhrzeit) * FROM meinetabelle";
    $result$mysqli->query($sql);
     
  9. akretschmer

    akretschmer Datenbank-Guru

    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.
     
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