2016-12-19 4 views
0

У меня есть следующие данные в таблице:Фильтрация строк, чтобы получить только последнее значение

ORDERID, PRODUCT, QUANTITY 
1,  potatoes, 10 
1,  oranges, 20 
2,  apples, 10 
2,  oranges, 15 
3,  pears, 20 
3,  peaches, 12 

Я хотел бы запросить таблицу, чтобы отфильтровать повторяющиеся продукты (например, апельсины), принимая только последний (выше ORDERID). то это должно привести к:

ORDERID, PRODUCT, QUANTITY 
1,  potatoes, 10 
2,  apples, 10 
2,  oranges, 15 
3,  pears, 20 
3,  peaches, 12 

ответ

3
select * 

from (select  t.* 
        ,row_number() over (partition by PRODUCT order by ORDERID desc) as rn 

     from  mytable t 
     ) 

where rn = 1 
1

Альтернативой ответа, данного @Dudu бы подзапрос, чтобы найти максимальный идентификатор заказа для каждого продукта, а затем присоединиться к вашей спиной к исходной таблице, чтобы ограничить к записям, которые вы хотите увидеть.

SELECT t1.ORDERID, 
     t1.PRODUCT, 
     t1.QUANTITY 
FROM yourTable t1 
INNER JOIN 
(
    SELECT PRODUCT, MAX(ORDERID) AS MAX_ORDERID 
    FROM yourTable 
    GROUP BY PRODUCT 
) t2 
    ON t1.PRODUCT = t2.PRODUCT AND 
     t1.ORDERID = t2.MAX_ORDERID 
Смежные вопросы