Получение всей строки из сгруппированного результата - PullRequest
0 голосов
/ 27 октября 2011

Вот пример таблицы базы данных:

| 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

По сути, я хочу получить последнюю цену, сгруппированную по ProductID.

Результат должен быть таким:

| ID | ProductID | Price 
| 2  | 2         |  12
| 3  | 3         |  25
| 4  | 4         |  17
| 5  | 12        |  97

Если вы заметили, первой строки там нет, потому что есть новая цена для ProductID 12, которая является строкой с идентификатором 5.

По сути, это должно быть что-то вроде get ID, ProductID и Price, сгруппированных по productID, где DateChanged является последним.

Ответы [ 4 ]

2 голосов
/ 27 октября 2011
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
1 голос
/ 27 октября 2011
SELECT  ID, ProductID,DateChanged, Price
FROM    myTable  
WHERE   ID IN
(
    SELECT  MAX(ID)
    FROM    myTable 
    GROUP BY ProductID
)
0 голосов
/ 27 октября 2011
SELECT ID, ProductId, Price 
from myTable A
where DateChanged >= all 
  (select DateChanged
   from myTable B
   where B.ID = A.ID);
0 голосов
/ 27 октября 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...