#sql #sql-server #select
#sql #sql-сервер #выберите
Вопрос:
У меня есть..
Date ID Qty
2019/5/1 A 11
2019/6/1 A 22
2019/7/1 B 33
2019/6/1 B 44
Мне нужны данные идентификатора и максимальное количество (дата) каждого идентификатора, как показано ниже
Date ID Qty
2019/6/1 A 22
2019/7/1 B 33
Я использую..
select max(Date),ID,Qty from table group by ID,Qty
но результат не тот, который я ожидаю
Ответ №1:
Вы можете использовать следующее решение:
SELECT t.*
FROM table_name t INNER JOIN (
SELECT MAX(Date) AS Date, ID
FROM table_name
GROUP BY ID
) tMAX ON t.ID = tMAX.ID AND t.Date = tMAX.Date
Ответ №2:
group by
вероятно, это неподходящий инструмент для этой работы. Вместо этого вы могли бы использовать rank
для поиска верхней строки для каждой группы и фильтрации в соответствии с ней:
SELECT date, id, qty
FROM (SELECT date, id, qty, RANK() OVER (PARTITION BY id ORDER BY date DESC) AS rk
FROM mytable) t
WHERE rk = 1
Комментарии:
1. большое вам спасибо. это работа, но я не понимаю код
2. это объясняется в блоге здесь: coding.feron.it/2012/08 /…
Ответ №3:
Попробуйте это
SELECT Date,
ID,
Qty
FROM
(
SELECT Date,
ROW_NUMBER()OVER(PARTITION BY ID ORDER BY Date DESC) AS Grp,
ID,
Qty
FROM <Table>
)Dt
WHERE Dt.Grp = 1
Ответ №4:
вы можете использовать коррелированный подзапрос
select t1.* from table_name t1
where date=( select max(date) from table_name t2 where t2.id=t1.id)