按时间序列数据中的时间点在pyspark配置单元表的列中查找新值



这个问题与我之前的问题有点相似,但有不同的要求。

我正在一张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;

相关内容

最新更新