【发布时间】:2015-07-29 01:31:10
【问题描述】:
您好,感谢您的帮助!我正在使用 SQL Server 2008 R2
Cust Date Opening Count Count Count Count Closing
1 01/1/x 1 0 0 0 0 1
1 .... 1 0 -1 0 0 0
1 31/1/x 0 0 0 +1 0 1
2 05/1/x 0 +1 0 0 0 1
2 .... 1 0 -1 0 0 0
2 31/1/x 0 0 0 +1 0 1
上表是我正在处理的一个示例。此表显示每天的期初余额、变动和期末余额。昨天收盘就是今天开盘,中间的横线是动作,一切都是计数。
我需要按如下方式将其汇总到每月快照表中,
Cust Month Opening Count Count Count Count Closing
1 1/x 1 0 -1 +1 0 1
2 1/x 0 +1 -1 +1 0 1
我在一张大桌子上做这个,所以它需要有效率,基本上,我必须在一个月的第一天开门,如果客户是在这个月晚些时候(不是第一个)添加的,那么该月的开盘价为 0,否则我可以将前一天的收盘价作为今天的开盘价。计数列跟踪白天的运动,我知道一列总是有正数或负数 1。所以对于运动,我可以使用 MIN/MAX 和分组依据。
我很难找到一种干净有效的方法来基本上合并所有每日行,同时从一个月的第一天开始,从最后一个月开始关闭。
我尝试过按客户使用 ROW_NUMBER() 分区,按日期排序,然后将最低行作为开始,将最高行作为结束,但是当本月 1 日没有行时,这会出错。
有人能指出我正确的方向吗?
提前致谢。
【问题讨论】: