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

Abfrage verzwickt datum und eindeutig

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von mr.mc.mauser, 14 Januar 2013.

  1. mr.mc.mauser

    mr.mc.mauser Neuer Benutzer

    Hallo,

    ich lese schon eine ganze zeit mit hab aber nichts gefunden...
    Mein Problem:
    Tabelle:
    id -> integer auto increment
    texte -> varchar
    tid -> integer
    dateline -> timestamp

    Inhalte:
    1 -> Ball -> 4 -> 1357777597
    2 -> Bumm -> 2 -> 1357784386
    3 -> Test -> 4 -> 1357851483
    4 -> Kopf -> 1 -> 1357924430
    5 -> Erde -> 1 -> 1358072259
    6 -> Mama -> 5 -> 1358072439
    7 -> Papa -> 5 -> 1358183191

    Abfrage:
    PHP:
    SELECT textetid
        FROM tabelle
        ORDER BY dateline DESC
    LIMIT 0
    ,5
    Das würde zur ausgabe bringen
    Ball -> 4
    Bumm -> 2
    Test -> 4
    Kopf -> 1
    Erde -> 1

    jetzt möchte ich aber keinen eintrag haben mit der gleichen tid.
    Es soll das ausgegeben werden
    Ball -> 4
    Bumm -> 2
    Kopf -> 1
    Mama -> 5

    Wie muss ich meine abfrage ändern das ich zwar nach Datum gesamt Sortiere aber pro tid nur 1 datensatz bekomme.

    Gruß
    Robert
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Unter PostgreSQL würde ich DISTINCT ON() verwenden:

    Code:
    test=*# select * from mrmcmauser ;
     id | texte | tid |  dateline
    ----+-------+-----+------------
      1 | ball  |   4 | 1357777597
      2 | bumm  |   2 | 1357784386
      3 | test  |   4 | 1357851483
      4 | kopf  |   1 | 1357924430
      5 | erde  |   1 | 1358072259
      6 | mama  |   5 | 1358072439
      7 | papa  |   5 | 1358183191
    (7 rows)
    
    Time: 0,186 ms
    test=*# select distinct on (tid) id, texte, tid, dateline from mrmcmauser order by tid, dateline;
     id | texte | tid |  dateline
    ----+-------+-----+------------
      4 | kopf  |   1 | 1357924430
      2 | bumm  |   2 | 1357784386
      1 | ball  |   4 | 1357777597
      6 | mama  |   5 | 1358072439
    (4 rows)
    
    Das kann MySQL aber wohl nicht.

    Code:
    test=*# select * from mrmcmauser where (tid, dateline) in (select tid, min(dateline) from mrmcmauser group by 1);
     id | texte | tid |  dateline
    ----+-------+-----+------------
      1 | ball  |   4 | 1357777597
      2 | bumm  |   2 | 1357784386
      4 | kopf  |   1 | 1357924430
      6 | mama  |   5 | 1358072439
    (4 rows)
    
    Andreas
     
    ukulele gefällt das.
  3. mr.mc.mauser

    mr.mc.mauser Neuer Benutzer

    danke das passt.
    Nur bei meiner Original tabelle musste ich noch

    min(dateline) in max(dateline) ändern

    Gruß
    Robert
     
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