SQL:选择每种产品的最新价格?

时间:2019-01-28 22:23:39

标签: sql

我在做作业时很麻烦...我需要按日期选择最后一个统一价格!

这是我这样做的方式:

SELECT CodProduct,UnitPrice,MAX(DateDeliver)
FROM Exemplo.dbo.sells
WHERE CodProduct is NOT NULL
GROUP BY CodProduct,UnitPrice

我目前正在做什么,从而产生了重复的鳕鱼产品

3 个答案:

答案 0 :(得分:0)

您需要一个子查询来找到每种产品的最新日期,然后需要将该日期和产品与主表进行匹配,以找到产品和日期所附带的单价:

SELECT s.CodProduct, s.UnitPrice, s.Date
FROM Exemplo.dbo.sells s INNER JOIN
      (SELECT s2.CodProduct, MAX(s2.Date) As MaxDate
       FROM Exemplo.dbo.sells s2 GROUP BY s2.CodProduct) md ON
             s.CodProduct = md.CodProduct AND 
             s.Date = md.MaxDate

那应该列出产品及其最近的单价。

答案 1 :(得分:0)

我相信您需要这样的东西(不完全是您的表定义):

select p1.ProductId, p1.Price
from
(
  select p.ProductId, max(p.Date) [date]
  from Product p
  group by p.ProductId
)x
join Product p1 on x.ProductId = p.ProductId and x.[date] = p1.Date

答案 2 :(得分:0)

您可以在CTE中使用ROW_NUMBER()对所有产品进行“排名”,以使某产品的最新日期的单价行号为1。然后在主SELECT中您只需过滤WHERE rn = 1。代码看起来像这样:

;WITH OrderedDates AS
(
    SELECT 
        CodProduct
        ,UnitPrice
        ,DateDeliver
        ,rn = ROW_NUMBER() OVER (PARTITION BY CodProduct ORDER BY DateDeliver DESC
    FROM Exemplo.dbo.sells
    WHERE CodProduct is NOT NULL
)
SELECT 
    CodProduct
    ,UnitPrice
    ,DateDeliver 
FROM OrderedDates
WHERE rn = 1