本月每周至少看电影的所有用户列表

问题描述 投票:-2回答:1
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个星期。

sql postgresql
1个回答
0
投票

您可以通过从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')                  
            );

Demo

© www.soinside.com 2019 - 2024. All rights reserved.