我正在尝试编写一个将执行以下操作的查询。
我有一张表,上面有单独的销售订单行。每条线都详细说明了客户,销售的产品,销售价格以及销售日期。
我正在尝试为每个产品代码建立,我们为其销售的最后价格是针对每个单独的客户。
例如,使用我的输入,我希望产品代码ABC为Brian返回'10',为Gary添加'20',为Sam返回'50。
以下是我期望的所有产品代码的完整结果。
输入
Order No Customer Product Code Price Date
-----------------------------------------------------------
1 Brian ABC 10 12/04/2018
2 Brian ABC 14 01/04/2018
3 Gary ABC 20 12/04/2018
4 Gary ABC 35 12/04/2017
5 Sam ABD 40 06/08/2017
6 Sam ABC 50 20/08/2017
7 Adam ABE 20 15/06/2016
8 Adam ABE 30 17/03/2017
输出
Order No Customer Product Code Price Date 1 Brian ABC 10 12/04/2018 3 Gary ABC 20 12/04/2018 6 Sam ABC 50 20/08/2017 5 Sam ABD 40 06/08/2017 8 Adam ABE 30 17/03/2017
答案 0 :(得分:1)
对于Row_number()
,你可以partition BY [product code], [customer]
为此。
以下查询应该适用于您的场景
SELECT *
FROM (SELECT [order no],
[customer],
[product code],
[price],
[date],
Row_number()
OVER(
partition BY [product code], [customer]
ORDER BY [date] DESC) AS RN
FROM [table]) T
WHERE T.rn = 1
答案 1 :(得分:0)
这是关于row_number():
的全部内容允许您分区(与组相似)并提供订单
select top 1 with ties *
from table
order by row_number() over (partition by [Product Code],Customer order by date desc)
答案 2 :(得分:0)
我认为这就是你要找的东西:
select a.* from #temp a join (
select customer, [product code], max(Date) maxdate
from #temp
group by customer, [product code])b
on a.customer=b.customer and a.date=b.maxdate and a.[product code]=b.[product code]