Abfrage verzwickt datum und eindeutig

mr.mc.mauser

Neuer Benutzer
Beiträge
4
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 texte, tid
    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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.612
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 texte, tid
    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


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
 
Werbung:
Oben