如何生成聚合的最新信息?

时间:2016-01-21 17:16:55

标签: sql sql-server

嘿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,因为此查询可能开始变得复杂。关于如何做的任何想法?

3 个答案:

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