[英]How can I write a query that aggregate a single row with latest date among multiple set of rows?
[英]How can I generate the latest for an aggregate?
嘿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操作,因为此查询可能开始变得复杂。 关于如何做的任何想法?
您应该汇总组中的收入并获得最大日期。
像这样:
SELECT
Customer, SUM(Revenue) as RevenueSum, MAX([Date]) as [Date]
FROM Sales
GROUP BY Customer
我认为这就是你所需要的
按客户从销售组中选择客户,总和(收入),最大(日期)
获取收入总和并从记录中获取具有最大日期的信息的一种方法是使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.