2015-08-10 4 views
0

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

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

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

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

Ниже выберите утверждение, которое будет все записи для кода продукта 1234.

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

ответ

2
SELECT * 
FROM 
(
SELECT Site_No, 
     Product_code, 
     Stock_Date, 
     Stock_Qty, 
     Row_Number() OVER (PARTITION BY Site_No ORDER BY Stock_Date DESC) rn 
FROM Stock_Levels 
where Product_code = 1234 
)A 
WHERE rn = 1 
+0

Спасибо за ваше время, это сработало отлично - высоко ценится. – Zakkaroo

0

в 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 
+0

Просто хотел сказать спасибо за ваше время, я попробовал оба ответа, и они оба отлично работают. – Zakkaroo

Смежные вопросы