mysql - 用于选择每组中前 x 个日期的 SQL Redshift 查询

标签 mysql amazon-redshift

假设我的表格如下所示

user_id   login_date
1   2019-03-13 00:00:00.000000
1   2019-04-07 00:00:00.000000
1   2018-10-19 00:00:00.000000
1   2018-11-12 00:00:00.000000
1   2018-04-11 00:00:00.000000
6   2018-11-18 00:00:00.000000
6   2018-07-07 00:00:00.000000
6   2019-09-04 00:00:00.000000
6   2018-07-31 00:00:00.000000
6   2019-10-20 00:00:00.000000
12  2018-12-17 00:00:00.000000
12  2018-07-06 00:00:00.000000
12  2018-04-21 00:00:00.000000
12  2019-07-28 00:00:00.000000
48  2018-12-01 00:00:00.000000
48  2019-11-11 00:00:00.000000
48  2019-03-10 00:00:00.000000
48  2018-10-13 00:00:00.000000
48  2019-02-21 00:00:00.000000
48  2018-01-04 00:00:00.000000

我想选择首次登录后前 2 天内的登录。换句话说,首先要找到每个组的最短登录日期,然后选择 48 小时内的登录,或者对每个组内的登录进行排序,然后选择前 2 天内的登录。

这里是创建类似表的 SQL

CREATE TABLE TEST (user_id INT, login_date DATE NOT NULL)
INSERT INTO TEST ( user_id, login_date)
VALUES
(1,'20190901'),
(1,'20140719'),
(1,'20101118'),
(1,'20101119'),
(1,'20141118'),
(6,'20110818'),
(6,'20070119'),
(6,'20090419'),
(6,'20070118'),
(6,'20100219'),
(12,'20120718'),
(12,'20070618'),
(12,'20041218'),
(12,'20041219'),
(48,'20120118'),
(48,'20111119'),
(48,'20031019'),
(48,'20100318'),
(48,'20021119'),
(48,'20010418')

最佳答案

您可以在子查询中使用窗口函数 first_value() 来检索每个组的最早登录日期,然后将其与外部查询中的每个登录日期进行比较:

select 
    id, 
    login
from (
    select 
        t.*,
        first_value(login) over(
            partition by id 
            order by login
            rows between unbounded preceding and unbounded following
        ) first_login
    from mytable t
) t
where login < first_login + interval '2 days'

另一种选择是使用相关子查询进行过滤:

select *
from mytable t
where login < (
    select min(login) + interval '2 days'
    from mytable t1
    where t1.id = t.id
)

关于mysql - 用于选择每组中前 x 个日期的 SQL Redshift 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58983988/

相关文章:

mysql - 仅当表不存在时如何执行 DDL?

mysql - JSON 数据没有表现

amazon-web-services - AWS Athena 从 S3 的 GLUE Crawler 输入 csv 创建的表中返回零记录

node.js - Postgres SequelizeDatabaseError : syntax error at or near RETURNING

python - 使用 Python 进行 redshift mysql 迁移

mysql - 我如何处理 MySQL 错误号 1040 : Too many connections?

java - MySQLNonTransientConnectionException : Too many connections

amazon-redshift - Redshift - 添加一列,我们是否必须更改我们以前的 CSV 以包含它?

python - 如何使用 SQLAlchemy 连接到 Amazon Redshift 中的集群?

php - 是否可以使用 php pdo 连接到 ec2 实例上的远程数据库?