У меня есть данные за линейные месяцы, и вам нужно получить подсчет только за последние несколько месяцев. Например, если человек был членом клуба здоровья в течение первых двух месяцев 2014 года, а затем выбыл на 4 месяца, а затем подписался на оставшиеся 6 месяцев, мне нужно показать, что они были членами в течение 6 месяцев подряд.SQL Server - Сброс количества строк в окне
Вот данные запроса и таблицы, которые я использую, чтобы попытаться получить количество строк. YearMo отслеживает возможный список лет и месяцев. Столбец ismember отслеживает, были ли они членами или нет - 1 означает, что они являются членами, nc, за которым следует годовая стоимость (nc201403), указывает месяцы, когда они не были членами.
В столбце monthcount вы можете видеть, что row_number не распознает месяцы, когда они не были членами, он просто подбирает счет, как только они снова становятся членами. Вместо того, чтобы показывать 8 в качестве последней месячной отметки, мне нужно, чтобы она была равна 6, и счет был снова запущен в 20140 году (июль 2014 года).
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
Любые мысли о том, как получить мой счет сброса после перерыва в членстве, будут оценены! Также открываются способы сделать это без окна/раздела. (Нет курсоры Пожалуйста Шестнадцать миллионов записей, чтобы иметь дело с.)
Что бы 'monthcount' для строк, которые не зарегистрированы? –
Какова версия сервера sql, которую вы используете? – Squirrel
SQL Server 2014. – mike