Этот вопрос немного похож на мой предыдущий, но имеет другие требования.
Я работаю над таблицей pyspark hive.
Это таблица ежемесячной активности членов клуба .
В каждой строке указано время, когда член принимает участие в деятельности клуба. Участник может заниматься активностью в любой месяц.
year month member_id
2010 01 m_453
2010 01 m_972
2010 02 m_453
2010 02 m_109
2010 03 m_453
2010 03 m_721
2010 03 m_109
Мне нужно найти новых участников, которые будут заниматься активностью каждый месяц. Новый участник означает, что участник впервые принял действие.
например,
year month member_id
2010 01 m_453
2010 01 m_972
2010 02 m_109
2010 03 m_721
Год и месяц в приведенной выше таблице - это первый раз, когда участник выполняет действие .
Мой sql:
with q as
(
select a.member_id, min(a.year * 100 + a.month) as min_year_month
from MY_TAB as a
group by a.member_id
)
select q.min_year_month, count(distinct(q.member_id)) as dist_m_id
from q
group by q.min_year_month
order by q.min_year_month
Я хотел бы знать, правильно ли это? а есть другие более эффективные DDL?
спасибо