2013-09-10 2 views
0

У меня есть эти столыкод продукта повторить в запросе

продукт

IDProd || Имя

Time_Price

IDPrice || IDProd || Цена || Время

запрос является:

SELECT P.IDProd,P.Name,TP.Price,MAX(TP.Time) 

FROM Product P INNER JOIN Time_Price TP ON P.IDProd=TP.IDProd 

GROUP BY P.IDProd,P.Name,TP.Price 

Мне нужно, что код продукта не повторяет

ответ

0

Это даст вам самую последнюю Price для каждого продукта.

SELECT IDProd, Name, 
     IDPrice, Price, Time 
FROM 
    (
     SELECT a.IDProd, a.Name, 
       b.IDPrice, b.Price, b.Time, 
       ROW_NUMBER() OVER (PARTITION BY a.IDProd ORDER BY b.Time DESC) rn 
     FROM Product a 
       INNER JOIN Time_price b 
        ON a.IDProd = b.IDProd 
    ) a 
WHERE a.rn = 1 

без использования оконной функции,

SELECT a.IDProd, a.Name, 
     b.IDPrice, b.Price, b.Time 
FROM Product a 
     INNER JOIN Time_price b 
      ON a.IDProd = b.IDProd 
     INNER JOIN 
     (
      SELECT IDProd, MAX(Time) Time 
      FROM Time_price 
      GROUP BY IDProd 
     ) c ON b.IDProd = c.IDProd AND 
       b.Time = c.Time 
+0

можно изменить row_number для ТОП? – Wfgo

+0

это даст вам отличный результат. если вы не делаете это с помощью 'CROSS APPLY'. –

+0

Этот запрос является сложным для того, что я делаю. Спасибо, в любом случае, я буду реализовывать. – Wfgo

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