Найдите ежемесячное количество за каждый месяц с даты начала до отмены участника

#sql #amazon-redshift

#sql #amazon-redshift

Вопрос:

Проблема: ежемесячное отдельное количество участников с первой даты считывания гена до отмены участника.

Участники могут иметь более одного чтения в месяц. Они могут продолжать получать столько чтений, сколько захотят.

Пример:

 member_id    date       gene_a_measurement_done    gene_b_measurement_done
5557153     1/1/2010    y                      
5557153     2/1/2010                                y
222458      2/1/2010    y                           y
222458      1/1/2011                                y
707222      1/1/2011    y
  

В другой таблице указана дата отмены участника:

 member_id    status      date    
5557153     Cancelled    5/1/2011           
222458      Cancelled    12/1/9999      
707222     Cancelled     12/1/9999  
  

Ожидаемый результат :

 month    distinct_count_of_member_with_gene_a_measurement      distinct_count_of_member_with_gene_b_measurement    
1/1/10              1                                       0
2/1/10              2                                       2
3/1/10              2                                       2
4/1/10              2                                       2
5/1/10              1                                       1
6/1/10              1                                       1
7/1/10              1                                       1
8/1/10              1                                       1
9/1/10              1                                       1
10/1/10             1                                       1
11/1/10             1                                       1
12/1/10             1                                       1
1/1/11              2                                       1    
  

Запрос выполнен:

 SELECT 
    sub.last_day,
    sum(sub.distinct_count_of_member_with_gene_a_measurement) as distinct_count_of_member_with_gene_a_measurement,
    sum(sub.distinct_count_of_member_with_gene_b_measurement) as distinct_count_of_member_with_gene_b_measurement,
FROM 
    (SELECT last_day(date),
            COUNT(DISTINCT member_id) as distinct_count_of_member_with_gene_a_measurement,
            null as distinct_count_of_member_with_gene_b_measurement,
    FROM  measurement
    WHERE gene_a_measurement_done is not null
    GROUP BY    last_day(date)
    UNION ALL
    SELECT  last_day(date),
            null as distinct_count_of_member_with_gene_a_measurement,
            COUNT(DISTINCT member_id) as distinct_count_of_member_with_gene_b_measurement,
    FROM  measurement
    WHERE gene_b_measurement_done is not null
    GROUP BY    last_day(date)) as sub
GROUP BY    sub.last_day(date) 
  

Приведенный выше запрос дает только отдельное количество участников за месяц, за который было выполнено измерение, и я не уверен, как лучше всего учитывать дату отмены? (внутреннее соединение с таблицей member_status в member_id и есть условие для фильтрации отмененного участника?)

Комментарии:

1. Почему отдельное количество? Могут ли участники регистрироваться на измерение чаще одного раза в месяц? И почему отмены? Подписываются ли участники на измерение после даты отмены? Кроме того, где ваш SQL-запрос, который вы пробовали, который не работает?

2. @Parfait Отличное количество, потому что у участника может быть более одного чтения в месяц (изменил вопрос). Отмена, потому что участник может отменить из программы медицинского отчета, и мы не учитываем этих участников в подсчете. Участники не будут иметь измерения после даты отмены, однако, если у них было измерение в первый месяц (например), тогда они будут считаться имеющими измерение до месяца отмены. Отправит запрос, который дает отдельное количество для каждой области измерения, не знаю, как охватить месяцы, для которых нет данных и даты отмены.

3. @GordonLinoff Amazon Redshift. Извините за путаницу. Изменили вопрос.