SQL: выберите самую последнюю дату для каждой категории
Я извлекаю данные из базы данных, а одна из таблиц содержит два столбца, которые вместе идентифицируют местоположение и другой столбец, содержащий дату каждого раза, когда он обслуживается. Можно ли написать SQL-запрос таким образом, что я получаю самое последнее время, когда каждое место обслуживалось?
Итак, если мои исходные данные выглядят так:
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
тогда запрос вернет это:
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
Это было бы легко сделать, если бы база данных была создана таким образом, что комбинации категорий были сохранены в отдельной таблице. Однако я не контролирую эту базу данных, поэтому я не могу вносить в нее изменения.
Ответы
Ответ 1
SELECT
category_a,
category_b,
MAX(date)
FROM
Some_Unnamed_Table
GROUP BY
category_a,
category_b
ORDER BY
category_a,
category_b
Я, конечно, не против помогать людям, когда могу, или я бы не был на этом сайте, но действительно ли вы искали ответ для этого до публикации?
Ответ 2
Это простая "группа", использующая тот факт, что "последней" датой является "наивысшая оценка" или max()
, дата
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 needed
Ответ 3
выберите category_a, category_b, max (дата) из группы tbl по категориям_a, category_b;
Ответ 4
Try
select category_a, category_b, max(date) as last_update from table group by category_a, category_b