2016-07-21 24 views
1

Ich suche nur die neueste Datensätze einer Tabelle auf Datum basierend auszuwählen, aber nur ein eine Distinct Auflistung von jedem des Urls. Die Tabellenstruktur ist so;SQL Distinct Spalt auswählen und aktuelles Datum

ID  URL   DateVisited 
1   google.com 01-01-2016 
2   yahoo.com 01-02-2016 
3   google.com 12-30-2015 
4   google.com 02-01-2016 

für meine Ergebnismenge So würde ich

google.com  02-01-2016 
yahoo.com  01-02-2016 

mag ich ein paar mehr conditionals in meiner eigentlichen Frage habe, sondern will nur die einzige neueste Datensätze in einem Hit-Log zu bekommen, anstatt Liste der eindeutigen URLs und Daten, nur unterschiedliche URLs und das späteste Datum.

+0

Mögliches Duplikat [Fetch die Zeile, die den Max-Wert für eine Spalte] (http://stackoverflow.com/questions/121387/Abruf-the-Reihe-which-hat-den-max-Wert-for-a-Säule) –

Antwort

6

Das ist eigentlich ziemlich einfach einfache Aggregation zu tun mit, etwa so:

select URL, max(DateVisited) 
from <table> 
group by URL 
+0

Arbeitete groß, ich hätte getan würde genügen, braucht , aber war die dtVisited in meiner Gruppe durch Klausel enthalten, die mir unerwünschte Ergebnisse gab, wusste ich, dass es einfacher war, als ich es machte, um es zu sein! –

-1

Dieser ist in der Regel getan row_number() mit:

select t.* 
from (select t.*, 
      row_number() over (partition by url order by datevisited desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

Auf diese Weise können Sie alle Spalten mit den neuesten Datensatz zugeordnet bekommen.

+1

Da er nicht die ID eine Vanille-max/Gruppe ich denke, das –