嘿stackoverflow社区,
我有一张Sales
表,下面是假设。
Customer Revenue State Date
David $100 NY 2016-01-01
David $500 NJ 2016-01-03
Fred $200 CA 2016-01-01
Fred $200 CA 2016-01-02
我正在撰写一份关于客户产生的收入的简单查询。输出返回如下:
David $600
Fred $400
我现在要做的是添加最新购买日期的行。
期望的结果:
David $600 2016-01-03
Fred $400 2016-01-02
我想尽可能保持SQL代码的清洁。我还想避免对新查询进行JOIN,因为此查询可能开始变得复杂。关于如何做的任何想法?
答案 0 :(得分:2)
您应该在您的小组中总计收入并获得最多的日期。
这样的事情:
R/
答案 1 :(得分:0)
我认为这就是你需要的东西
按客户从销售组中选择客户,总和(收入),最大(日期)
答案 2 :(得分:0)
获取收入总和并从MAX日期获取记录信息的一种方法是使用ROW_NUMBER()和SUM()窗口函数。
SUM() OVER()
将客户的金额应用于每一行,ROW_NUMBER() OVER()
将为每一行提供客户和日期DESC的订单号。
将它放在子查询中,只选择Row_Number为1(最大日期)的记录
SELECT [Customer],
[Revenue],
[State],
[Date]
FROM (SELECT [Customer],
SUM([Revenue]) OVER (PARTITION BY [Customer]) [Revenue],
[State],
[Date],
ROW_NUMBER() OVER (PARTITION BY [Customer] ORDER BY [Date] DESC) Rn
FROM Sales
) t
WHERE t.Rn = 1