Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Select Distinct column and latest date

I'm looking to select just the latest records of a table based on date, but only one one Distinct listing of each of the urls. The table structure is like this;

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

So for my result set I would want

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

I will have a couple more conditionals in my actual query, but just want to get the single latest records in a hit log, rather than list of distinct urls and dates, just distinct url's and the latest date.

like image 710
Nick G Avatar asked Jul 21 '16 13:07

Nick G


People also ask

How do I get the latest date in a column in SQL?

Here is the syntax that we can use to get the latest date records in SQL Server. Select column_name, .. From table_name Order By date_column Desc; Now, let's use the given syntax to select the last 10 records from our sample table.

How do I SELECT unique dates in SQL?

You need to use DISTINCT keyword to select distinct dates from datetime column in a table. Now you can insert some records in the table using insert command. Display all records from the table using select statement.

Can you use distinct and ORDER BY together?

All titles are distinct. There is no way this query can be executed reasonably. Either DISTINCT doesn't work (because the added extended sort key column changes its semantics), or ORDER BY doesn't work (because after DISTINCT we can no longer access the extended sort key column).

Can we use distinct in update query in SQL?

Yes, SQL Server. Yes, all of the matching rows should be updated. It's just setting a bit from 1 to 0.


2 Answers

This is actually pretty easy to do using simple aggregation, like so:

select URL, max(DateVisited)
from <table>
group by URL
like image 118
Chitharanjan Das Avatar answered Oct 14 '22 02:10

Chitharanjan Das


This is usually done using row_number():

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

This allows you to get all the columns associated with the latest record.

like image 25
Gordon Linoff Avatar answered Oct 14 '22 02:10

Gordon Linoff