我有一个困难的时间w /标题,希望这更清楚......
我有一个像这样的数据表(简化);
日期
客户
量
2014年1月1日
1
100.5
2014年4月4日
1
122.5
2014年2月1日
3
3.25
......但只有一百万条记录。
我想找到总金额最大的每个客户的x天(假设为90)。
为了使问题略有不同,给定所有客户的所有交易,对于每个客户,我希望找到具有最大总金额的90天期间以及该期间的总金额。
尝试建议蛮力方法,我定义所有可能的范围(或在运行中迭代所有可能的范围)。
有关更优雅解决方案的任何想法吗?
答案 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