【发布时间】:2013-03-25 18:50:39
【问题描述】:
我正在使用两张桌子。我们称他们为“客户”和“积分”。
积分表如下所示:
Account Year M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12
123 2011 10 0 0 0 10 0 10 0 0 0 0 10
123 2012 0 0 0 0 10 0 0 10 10 10 10 20
123 2013 5 0 0 0 0 0 0 0 0 0 0 0
但这些点在滚动 12 个月内有效。计算当前客户的积分很简单,但挑战在于不再活跃的客户。假设客户 123 在 2013 年 1 月变得不活动,我们只想计算 2013 年 2 月至 2013 年 1 月。这就是另一个表 Customers 的用武之地,让我们简化并说它看起来像这样:
Account End Date
123 20130105
现在,我要做的是创建一个查询来计算每个客户拥有的积分数量。 (当前 12 个月适用于活跃客户,过去 12 个月适用于不再活跃的客户。)
这里有更多信息:
- 我正在运行 SQL Server 2008。
- 这些表格是这样提供给我的,我无法修改它们。
- 活跃客户是指结束日期为 99991231(9999 年 12 月 31 日)的客户
- 积分表仅填充客户是活跃客户的年份。 Aka,某人在 2009 年 2 月成为活跃客户,他们有 2009 年的条目,如果他们在 2009 年 7 月变得不活跃,他们的积分仅计算 2009 年 2 月至 7 月,2008 年没有行,因为他们不是客户那时。 2009 年 1 月和 8 月至 12 月将显示 0。
- 此外,仅当客户当年获得任何积分时才会创建记录。如果客户在一年内获得 0 分,则不会有记录。
- 对于边境案件,如果您进入一个月的第一天,则计算该月。例如,假设今天是 2013 年 4 月 1 日,这意味着我们总结了 May'12-April'13。
这是一个相当复杂的问题。如果有什么我可以更好地解释的,请告诉我。谢谢!
【问题讨论】:
标签: sql sql-server-2008