#sql #sql-server #database
#sql #sql-сервер #База данных
Вопрос:
Вот пример таблицы базы данных :
| ID | ProductID | DateChanged | Price
| 1 | 12 | 2011-11-11 | 93
| 2 | 2 | 2011-11-12 | 12
| 3 | 3 | 2011-11-13 | 25
| 4 | 4 | 2011-11-14 | 17
| 5 | 12 | 2011-11-15 | 97
По сути, я хочу получить последнюю цену, сгруппированную по идентификатору продукта.
Результат должен быть таким :
| ID | ProductID | Price
| 2 | 2 | 12
| 3 | 3 | 25
| 4 | 4 | 17
| 5 | 12 | 97
Если вы заметили, первой строки там нет, потому что есть новая цена для ProductID 12, которая является строкой с идентификатором 5.
В принципе, это должно быть что-то вроде get ID, ProductID и Price, сгруппированных по ProductID, где DateChanged является последним.
Ответ №1:
SELECT ID, ProductId, Price
FROM
(
SELECT ID, ProductId, Price
, ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY DateChanged DESC) AS rowNumber
FROM yourTable
) AS t
WHERE t.rowNumber = 1
Ответ №2:
SELECT ID, ProductID,DateChanged, Price
FROM myTable
WHERE ID IN
(
SELECT MAX(ID)
FROM myTable
GROUP BY ProductID
)
Ответ №3:
select a.id, a.productid, a.price
from mytable a,
(select productid, max(datechanged) as maxdatechanged
from mytable
group by productid) as b
where a.productid = b.productid and a.datechanged = b.maxdatechanged
Комментарии:
1. Очень просто и понятно. Спасибо за быстрый ответ.
Ответ №4:
SELECT ID, ProductId, Price
from myTable A
where DateChanged >= all
(select DateChanged
from myTable B
where B.ID = A.ID);
Комментарии:
1. Я думаю, что мое решение проще и интуитивно понятнее. 🙂 Выберите продукт и цену с наибольшим значением datechanged среди всех его собственных записей.