这个问题与我之前的问题有点相似,但有不同的要求。
我正在一张pyspark蜂箱的桌子上工作。
这是俱乐部成员每月的活动表。
每一排是会员参加俱乐部活动的时间。会员可以参加任何一个月的活动。
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吗?
感谢
这个方法很好。我会使用:
select year, month, member_id
from (select t.*, row_number() over (partition by member_id order by year, month) as seqnum
from t
) t
where seqnum = 1;