SQL Изберете последна дата за всеки магазин

Имам база данни, където всеки ред съдържа Site_No, Product_code, Stock_Date и Stock_Qty. За един код на сайт и продукт може да има около 20 записа, всеки с различни дати.

Трябва да върна ВСИЧКИ номера на сайтове, но само записа, който съдържа най-новата дата.

Търсих в Google, прочетох множество публикации тук, които изглежда имаха същия тип заявка, но не успях да намеря нито едно от решенията, адаптирани да работят за мен. Или получавам само 2 резултата (2-те, които съответстват на максималната дата), или пак получавам ВСИЧКИ резултати (всички дати и сайтове)

Използване на Teradata SQL Assistant

По-долу е инструкцията за избор, която ще върне всички записи за продуктов код 1234.

SELECT Site_No, 
       Product_code, 
       Stock_Date,
       Stock_Qty 
FROM Stock_Levels
where Product_code = 1234

person Zakkaroo    schedule 10.08.2015    source източник


Отговори (2)


В Teradata има хубаво разширение към стандартния SQL за филтриране на резултата от агрегирана функция с прозорец, QUALIFY:

SELECT Site_No, 
       Product_code, 
       Stock_Date,
       Stock_Qty 
FROM Stock_Levels
where Product_code = 1234
QUALIFY
   ROW_NUMBER() 
   OVER (PARTITION BY Site_No           -- for each site
         ORDER BY Stock_Date DESC) = 1  -- get the highest date
person dnoeth    schedule 10.08.2015
comment
Просто исках да благодаря за отделеното време, опитах и ​​двата дадени отговора и и двата работят перфектно. - person Zakkaroo; 10.08.2015

person    schedule
comment
Благодарим ви за отделеното време, това работи перфектно - оценявам го много. - person Zakkaroo; 10.08.2015