Sortierung nach Datum innerhalb einer Tabelle

Sortierung nach Datum innerhalb einer Tabelle

am 01.09.2007 12:26:09 von Tobias

Hallo,

ich habe folgende Tabelle (tabelle1):

tid* kdid sbid datum feld1 feld2
1 1 2 20070809153832 23 13
2 1 2 20070809133832 22 14
3 1 2 20070722102411 24 12
4 1 2 20070714081245 24 12


Als Ergebnis möchte ich nun pro Tag also 20070809 immer nur das neueste
Ergebnis gelistet haben.
Also für das Datum 20070809 soll als Ergebnis die Zeile mit tid=1
erscheinen.



Mit folgender Abfrage erhalte ich allerdings immer das älteste Datum pro
Tag:

SELECT *
FROM tabelle1
WHERE kdid =1
AND sbid =2
GROUP BY substring( datum, 1, 8 )
ORDER BY datum DESC


Wie kann ich die Sortierung hinbekommen das mir pro Tag immer der
neueste Datum / Zeit Eintrag gelistet wird?


Danke im Voraus,
Gruss

Tobias

Re: Sortierung nach Datum innerhalb einer Tabelle

am 01.09.2007 12:52:19 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Sortierung nach Datum innerhalb einer Tabelle

am 04.09.2007 22:36:42 von Dominik Echterbruch

Tobias schrieb:
>
> tid* kdid sbid datum feld1 feld2
> 1 1 2 20070809153832 23 13
> 2 1 2 20070809133832 22 14
> 3 1 2 20070722102411 24 12
> 4 1 2 20070714081245 24 12

Also in etwa so:

SHOW CREATE TABLE tabelle\G
*************************** 1. row ***************************
Table: tabelle
Create Table: CREATE TABLE `tabelle` (
`tid` int(10) unsigned NOT NULL auto_increment,
`kdid` int(10) unsigned NOT NULL,
`sbid` int(10) unsigned NOT NULL,
`datum` datetime NOT NULL,
PRIMARY KEY (`tid`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
1 row in set (0.01 sec)


SELECT tid, kdid, sbid, datum FROM tabelle;
+-----+------+------+---------------------+
| tid | kdid | sbid | datum |
+-----+------+------+---------------------+
| 1 | 1 | 2 | 2007-08-09 15:38:32 |
| 2 | 1 | 2 | 2007-08-09 13:38:32 |
| 3 | 1 | 2 | 2007-07-22 10:24:11 |
| 4 | 1 | 2 | 2007-07-14 08:12:45 |
+-----+------+------+---------------------+
4 rows in set (0.00 sec)

> Als Ergebnis möchte ich nun pro Tag also 20070809 immer nur das neueste
> Ergebnis gelistet haben.

SELECT a.tid, a.kdid, a.sbid, a.datum
FROM tabelle a
LEFT JOIN tabelle b
ON DATE(a.datum) = DATE(b.datum)
AND a.datum < b.datum
WHERE a.kdid = 1
AND a.sbid = 2
AND b.datum IS NULL
+-----+------+------+---------------------+
| tid | kdid | sbid | datum |
+-----+------+------+---------------------+
| 1 | 1 | 2 | 2007-08-09 15:38:32 |
| 3 | 1 | 2 | 2007-07-22 10:24:11 |
| 4 | 1 | 2 | 2007-07-14 08:12:45 |
+-----+------+------+---------------------+
3 rows in set (0.00 sec)

Eine Erläuterung dazu spare ich mir. Die findest du oft genug, wenn du
dich in der Gruppe mal ein wenig umsiehst.

Grüße,
Dominik
--
Wo kämen wir denn hin, wenn jeder sagen würde wo kämen wir hin, aber
niemand gehen würde um zu sehen, wohin wir kämen, wenn wir gingen?
(Autor unbekannt)