如何从该表中选择最近3年内连续交易的user_id



这个表非常简单,只有两列-user_id和date。我想做的是选择2020年、2019年和2018年交易的所有user_id。

我不知道如何做到这一点,我试图用2020年交易的user_ids制作一张表,并与2019年交易的人一起加入,然后与2018年交易的人们一起加入。

这是代码:

select DISTINCT(user_id) 
from (
(
( SELECT t1.user_id
FROM table as t1
WHERE EXTRACT( YEAR FROM date) = 2020
) as flag_2020 

JOIN 

(
SELECT t2.user_id
FROM table as t2
WHERE EXTRACT( YEAR FROM date) = 2019
) as flag_2019 

ON flag_2019.user_id = flag_2020.user_id

)  as tab2

JOIN 

( SELECT t3.user_id
FROM table as t3
WHERE EXTRACT( YEAR FROM date) = 2018
) as flag_2018 

ON tab2.user_id= flag_2018.user_id 
)  

这不起作用,并且在"tab2 JOIN"行附近出现检查语法错误。我不知道该怎么做。

我想做的是选择在2020年、2019年和2018年交易的所有user_id。

一个简单的方法使用聚合:

select user_id
from (select distinct user_id, year(date) as yyyy
from t
where date >= '2018-01-01' and
date < '2021-01-01'
) uy
group by user_id
having count(*) = 3;

子查询在指定的范围内,每个user_id和年份返回一行。外部查询返回具有全部三行的所有用户ID。

您实际上并不需要子查询。我只是觉得这样的逻辑更容易遵循:

select user_id
from t
where date >= '2018-01-01' and
date < '2021-01-01'
group by user_id
having count(distinct year(date)) = 3;

最新更新