SQL Выберите самые новые записи, которые имеют разный столбец Name
Я искал, и я нашел это
SQL выбор строк по последней дате
Что так близко к тому, что я хочу, но я не могу заставить его работать.
Я получаю сообщение об ошибке "Идентификатор столбца" недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Я хочу, чтобы самая новая строка по дате для каждого отдельного имени
Select ID,Name,Price,Date
From table
Group By Name
Order By Date ASC
Вот пример того, что я хочу
Table
ID| Name | Price | Date
---------------------------------
0 | A | 10 | 2012-05-03
1 | B | 9 | 2012-05-02
2 | A | 8 | 2012-05-04
3 | C | 10 | 2012-05-03
4 | B | 8 | 2012-05-01
желаемый результат
ID| Name | Price | Date
------------------------------
2 | A | 8 | 2012-05-04
3 | C | 10 | 2012-05-03
1 | B | 9 | 2012-05-02
Я использую сервер Microsoft SQL Server 2008
Спасибо за любую помощь или очки в правильном направлении
Ответы
Ответ 1
Select ID,Name, Price,Date
From temp t1
where date = (select max(date) from temp where t1.name =temp.name)
order by date desc
Вот SQL Fiddle с демонстрацией
или, как указывает Конрад, вы можете использовать INNER JOIN:
SELECT t1.ID, t1.Name, t1.Price, t1.Date
FROM temp t1
INNER JOIN
(
SELECT Max(date) date, name
FROM temp
GROUP BY name
) AS t2
ON t1.name = t2.name
AND t1.date = t2.date
ORDER BY date DESC
Ответ 2
Есть несколько способов сделать это. Этот использует ROW_NUMBER. Просто разделяйте по имени, а затем заказывайте то, что вы хотите поместить нужные значения в первую позицию.
WITH cte
AS (SELECT Row_number() OVER (partition BY NAME ORDER BY date DESC) RN,
id,
name,
price,
date
FROM table1)
SELECT id,
name,
price,
date
FROM cte
WHERE rn = 1
DEMO
Обратите внимание, что вы должны добавить идентификатор (partition BY NAME ORDER BY date DESC, ID DESC)
в свой фактический запрос в качестве тай-брейкера для даты
Ответ 3
select * from (
Select
ID, Name, Price, Date,
Rank() over (partition by Name order by Date) RankOrder
From table
) T
where RankOrder = 1
Ответ 4
Используйте Отличный вместо Группа
Select Distinct ID,Name,Price,Date
From table
Order By Date ASC
http://technet.microsoft.com/en-us/library/ms187831.aspx