create table active_users(
user_id numeric,
movie_streamed date
)
insert into active_users values (1,'2020-01-2'::date);
insert into active_users values (1,'2020-01-9'::date);
insert into active_users values (1,'2020-01-16'::date);
insert into active_users values (1,'2020-01-23'::date);
insert into active_users values (1,'2020-01-30'::date);
insert into active_users values (2,'2020-01-14'::date);
insert into active_users values (2,'2020-01-16'::date);
大家好,
我正在寻找一个查询,它将帮助我获得本月每周至少看过一部电影的用户(即测试数据)。给定数据,其中每个记录都有user_id,并且特定人何时观看电影(给定日期)。我想要一个通用的答案。不像每个月都有4周。因为在某些情况下,在某些情况下可能还会有5个星期。
您可以通过从1到5进行计数来使用generate_series(1,5)
,因为应该有5个不同的星期存在,甚至如您已经提到的那样可能还没有完成。
诀窍是比较当前月份中每个星期的开始日期的不同计数:
SELECT u.user_id
FROM active_users u
JOIN generate_series( 1, 5 ) g
ON date_trunc('week', movie_streamed)
= date_trunc('week', current_date) + interval '7' day * (g-1)
GROUP BY u.user_id
HAVING COUNT(DISTINCT date_trunc('week', movie_streamed)) =
(
SELECT COUNT(*)
FROM generate_series( 1, 5 ) g
WHERE to_char(current_date,'yyyymm')
= to_char(date_trunc('week', current_date)
+ interval '7' day * (g-1),'yyyymm')
);