SQL Выберите последнюю дату для каждого магазина

У меня есть база данных, где каждая строка содержит Site_No, Product_code, Stock_Date и Stock_Qty. Для одного сайта и кода продукта может быть около 20 записей, каждая с разными датами.

Мне нужно вернуть ВСЕ номера сайтов, но только ту запись, которая содержит самую новую дату.

Я погуглил, я прочитал здесь несколько сообщений, которые, казалось, содержали один и тот же тип запроса, но мне не удалось найти ни одно из решений, адаптированных для работы для меня. Я либо получаю только 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 есть хорошее расширение Standard 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