我在做作业时很麻烦...我需要按日期选择最后一个统一价格!
这是我这样做的方式:
SELECT CodProduct,UnitPrice,MAX(DateDeliver)
FROM Exemplo.dbo.sells
WHERE CodProduct is NOT NULL
GROUP BY CodProduct,UnitPrice
我目前正在做什么,从而产生了重复的鳕鱼产品
答案 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