Определить группу записей после другой группы - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь определить группы записей, которые идут после других групп. У нас есть участники, которые покинули одну группу и вернулись, но не должны были быть возвращены в другую подгруппу.

Я пытаюсь определить месяцы, когда участник вернулся - после первоначальной регистрации. Я пытался сгруппировать их различными способами (Row_Num, Rank, GROUPing), но не понял этого.

Я хочу указать выделенные месяцы, когда участник становится правомочным после того, как он не отвечает критериям. Чтобы сделать его более сложным, некоторые участники начинают как не имеющие права (0, 1, 0, 1). Я хочу определить вторую и последующие группы, в которых Enrolled = 1 по месяцам - возможно, добавив дополнительный столбец для группировки изменений, таких как столбец в СИНИМ ниже.

enter image description here

Вот некоторые примеры данных. Будем благодарны за любые другие предложения относительно того, как сделать эту работу.

CREATE TABLE #TEMP(MEMBER VARCHAR(20), MDATE DATE, ELIGIBLE INT, ENROLLED INT)

INSERT INTO #TEMP ( MEMBER, MDATE, ELIGIBLE, ENROLLED )
SELECT 'JUDY' AS MEMBER, '2017-01-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-02-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-04-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-05-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-06-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-07-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-08-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-09-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-10-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-11-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2017-12-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-01-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-02-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-04-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-05-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-06-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-07-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-08-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-09-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-10-01' AS MDATE, 0 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-11-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2018-12-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2019-01-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2019-02-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'JUDY' AS MEMBER, '2019-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-01-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-02-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-04-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-05-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-06-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-07-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-08-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-09-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-10-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-11-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2017-12-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-01-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-02-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-04-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-05-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-06-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-07-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-08-01' AS MDATE, 0 AS ELIGIBLE, 0 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-09-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-10-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-11-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2018-12-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2019-01-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2019-02-01' AS MDATE, 1 AS ELIGIBLE, 1 AS ENROLLED UNION  
SELECT 'FRANK' AS MEMBER, '2019-03-01' AS MDATE, 1 AS ELIGIBLE, 0 AS ENROLLED

1 Ответ

2 голосов
/ 29 марта 2019

Я не уверен, что вы подразумеваете под "некоторые участники начинают с неприемлемых (0, 1, 0, 1)", но исходя из желаемого результата:

WITH TEMP2(MEMBER, MDATE, ELIGIBLE, ENROLLED, CHANGED) AS (
    SELECT MEMBER, MDATE, ELIGIBLE, ENROLLED,CASE WHEN ELIGIBLE=(LAG(ELIGIBLE) OVER (PARTITION BY MEMBER ORDER BY MEMBER, MDATE)) THEN 0 ELSE 1 END CHANGED
    FROM #TEMP
)
SELECT  MEMBER, MDATE, ELIGIBLE, ENROLLED, SUM(CHANGED) OVER (PARTITION BY 1 ORDER BY MEMBER, MDATE) QUESTIONMARK
FROM TEMP2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...