我有两张正在使用的桌子。我们称他们为“客户”和“积分”。
积分表如下所示:
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。
这是一个相当复杂的问题。如果有什么我可以更好地解释的,请告诉我。谢谢!