2012-03-26 6 views
9

Ich habe eine MySQL-Tabelle mit drei Spalten: Benutzername, Ort, Zeitstempel. Dies ist im Grunde ein Protokoll der Benutzeraktivität von dem Ort, an dem sie sich befinden und der Zeit, in der sie dort waren.SQL-Abfrage für Select distinct mit dem neuesten Zeitstempel zuerst

Was ich tun möchte, ist ein eindeutiger Benutzername + Ort, wo nur das neueste Element (nach Timestamp) zur Verfügung gestellt wird.

sagen also der Tisch besteht aus:

tom roomone 2011-3-25 10:45:00 
tom roomtwo 2011-3-25 09:00:00 
tom roomtwo 2011-3-25 08:30:00 
pam roomone 3011-3-25 07:20:23 

Ich möchte diese nur ausgewählt werden:

tom roomone 2011-3-25 10:45:00 
tom roomtwo 2011-3-25 09:00:00 

Antwort

15

versuchen Sie die folgende Abfrage mit table1 als Tabellenname:

select username, location, max(timestamp) from table1 
group by username, location 
1

Diese Antwort wird nicht wirklich garantieren, dass die anderen Spalten den gleichen Datensatz wie der Benutzername/Zeitstempel haben, aber die folgende wil l (mit einer Unterabfrage).

select t1.* 
from (
    select ForeignKeyId,AttributeName, max(Created) AS MaxCreated 
    from YourTable 
    group by ForeignKeyId,AttributeName 
) t2 
join YourTable t1 
on t2.ForeignKeyId = t1.ForeignKeyId 
and t2.AttributeName = t1.AttributeName 
and t2.MaxCreated = t1.Created 

Antwort gefunden auf:

Select distinct most recent