Wilduck
Wilduck

Reputation: 14126

SQL: Select most recent date for each category

I'm pulling data from a database and one of the tables contain two columns that together identify a location and another column containing a date of each time it was serviced. Is it possible to write a SQL query such that I get the most recent time that each location was serviced?

So if my raw data looks like this:

category_a  category_b  date
       1           a     1/1/01
       1           a     2/2/02
       1           b     1/2/01
       1           b     2/3/02
       2           a     1/3/01
       2           a     2/4/02
       2           b     1/4/01
       2           b     2/5/02

then the query would return this:

category_a  category_b  date
       1           a     2/2/02
       1           b     2/3/02
       2           a     2/4/02
       2           b     2/5/02

This would be easy to do if the database was authored in such a way that the category combinations were stored in a separate table. However, I don't control this database, so I can't make changes to it.

Upvotes: 39

Views: 64576

Answers (4)

BugFinder
BugFinder

Reputation: 17868

Try

select category_a, category_b, max(date) as last_update from table group by category_a, category_b

Upvotes: 3

Muhammad Usama
Muhammad Usama

Reputation: 3137

select category_a, category_b, max( date) from tbl group by category_a ,category_b;

Upvotes: 2

Tom H
Tom H

Reputation: 47392

SELECT
    category_a,
    category_b,
    MAX(date)
FROM
    Some_Unnamed_Table
GROUP BY
    category_a,
    category_b
ORDER BY
    category_a,
    category_b

I certainly don't mind helping people when I can, or I wouldn't be on this site, but did you really search for an answer for this before posting?

Upvotes: 32

Bohemian
Bohemian

Reputation: 425198

This is a simple "group by" using the fact the the "most recent" date is the "highest valued", or max(), date

select category_a, category_b, max(date)
from mytable
group by category_a, category_b
order by category_a, category_b -- The ORDER BY is optional, but the example data suggests it's needed

Upvotes: 6

Related Questions