sql - 本月每周至少观看一部电影的所有用户列表
问题描述
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 周。
解决方案
您可以generate_series(1,5)
从 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')
);
推荐阅读
- cassandra - Cassandra 复制因子
- javascript - 根据另一个下拉列表填充一个下拉列表并获取“值”而不是显示值的下拉列表
- ios - Xcode 的 Build Options 中的 $VALIDATE_PRODUCT 标志做了什么样的验证?
- javascript - 如何优化我的功能不重复行?
- scheme - 在 Racket 程序中使用 Scheme 库
- python - Excel 中的 Oracle - 动态创建列类型
- amazon-web-services - AWS EC2 实例并通过 gmail SMTP 587 发送电子邮件
- c# - 是否可以使用 WPF 从 2D PNG 图像(高级形状)创建 3D 模型?
- http - 使用 http 或更好的 https 的 itemtype?
- python - Python从文件编码问题中读取