繁体   English   中英

如何生成汇总的最新信息?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM