SQL - 查找客户最大的活动期

时间:2014-02-27 19:20:45

标签: sql tsql sql-server-2008-r2 aggregate aggregation

我有一个困难的时间w /标题,希望这更清楚......

我有一个像这样的数据表(简化);

日期 客户
2014年1月1日 1 100.5
2014年4月4日 1 122.5
2014年2月1日 3 3.25

......但只有一百万条记录。

我想找到总金额最大的每个客户的x天(假设为90)。

为了使问题略有不同,给定所有客户的所有交易,对于每个客户,我希望找到具有最大总金额的90天期间以及该期间的总金额。

尝试建议蛮力方法,我定义所有可能的范围(或在运行中迭代所有可能的范围)。

有关更优雅解决方案的任何想法吗?

2 个答案:

答案 0 :(得分:0)

你可以使用自联接,但性能可能不是那么好:

select t.*,
       (select sum(t2.amount)
        from table t2
        where t2.customer = t.customer and
              t2.date >= dateadd(day, -90, t.date) and t2.date <= t.date
       ) as amount90
from table t;

SQL Server 2012中有一种更有效的方法。

答案 1 :(得分:0)

这是一个伪代码,我认为可以解决这个问题。但它可能会非常缓慢。

您可以使用一个函数来计算提供开始日期和天数的活动数量,

--function F
@userid, @startdate, @dayCount
SELECT COUNT(*)
FROM TABLE 
WHERE 
UserID = @userid
and date > @startDate
and date < Dateadd(@startdate, @dayCount)

然后在该功能上做最大值?

select max(f(user, date)) 
from TableContainingDateRanges