【发布时间】:2016-02-24 08:54:53
【问题描述】:
我有一些线性月份的数据,只需要计算最近连续几个月的数据。例如,如果一个人在 2014 年的前两个月是健身俱乐部的会员,然后退出 4 个月,然后在剩下的 6 个月注册,我需要证明他们已经连续 6 个月成为会员。
这是我用来尝试获取行数的查询和表数据。 YearMo 跟踪可能的年份和月份列表。 ismember 列跟踪他们是否是成员 - 1 表示他们是成员,nc 后跟 yearmo 值 (nc201403) 表示他们不是成员的月份。
在 monthcount 列中,您可以看到 row_number 不识别他们不是会员的月份,一旦他们再次成为会员,它就会开始计数。我不需要将 8 显示为最后一个月的计数,而是需要它为 6,并且计数在 201407 年(2014 年 7 月)重新开始。
SELECT member_id, YearMo, ismember,
ROW_NUMBER() OVER(PARTITION BY member_id, ismember ORDER BY members.yearmo ) AS 'monthcount'
FROM #temp_members WHERE member_id = '12345678' ORDER BY yearmo
member_id YearMo ismember monthcount
12345678 201401 1 1
12345678 201402 1 2
12345678 201403 nm201403 1
12345678 201404 nm201404 1
12345678 201405 nm201405 1
12345678 201406 nm201406 1
12345678 201407 1 3
12345678 201408 1 4
12345678 201409 1 5
12345678 201410 1 6
12345678 201411 1 7
12345678 201412 1 8
任何关于如何在会员资格中断后重置我的计数的想法将不胜感激!也可以在没有窗口/分区的情况下执行此操作。 (请不要使用游标。要处理 1600 万条记录)
【问题讨论】:
-
非成员行的
monthcount是什么? -
你使用的sql server是什么版本的?
-
他们不是会员的任何月份都只是 1。
标签: sql-server row-number