SQL Server - 按客户和产品代码分组的最后付款价格

时间:2018-04-12 16:04:08

标签: sql-server

我正在尝试编写一个将执行以下操作的查询。

我有一张表,上面有单独的销售订单行。每条线都详细说明了客户,销售的产品,销售价格以及销售日期。

我正在尝试为每个产品代码建立,我们为其销售的最后价格是针对每个单独的客户。

例如,使用我的输入,我希望产品代码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

3 个答案:

答案 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]