如何在 SQL 中选择出现在不同查询中的第一个时间戳?

问题描述 投票:0回答:1

所以我有如下数据:

USER                TIMESTAMP    DATA
0001  2021-05-18 20:40:06.251   alpha
0002  2021-05-18 22:40:06.251    beta
0002  2021-05-18 21:40:06.251   gamma
0003  2021-05-18 19:40:06.251   delta
0004  2021-05-18 01:40:06.251 epsilon
0003  2021-05-18 20:40:06.251    zeta

我想创建一个列表,其中包含所有不同的用户名及其相关的第一个时间戳数据。

结果应该是这样的:

USER                TIMESTAMP    DATA
0001  2021-05-18 20:40:06.251   alpha
0002  2021-05-18 21:40:06.251   gamma
0003  2021-05-18 19:40:06.251   delta
0004  2021-05-18 01:40:06.251 epsilon

现在通过执行以下操作解决了这个问题:

    SELECT *
    FROM df a
    WHERE a.TIMESTAMP IN (
            SELECT min(TIMESTAMP)
            FROM df AS b
            WHERE a.USER = b.USER
        )

但是,这对我的服务器来说是一种计算负担,所以我需要一种不同的方法。我一直在尝试在 USER AND TIMESTAMP 上加入 df,但我还没有得到它,有没有更快的方法的想法?我在 Snowflake 顺便说一句...

sql timestamp snowflake-cloud-data-platform distinct ansi-sql
1个回答
1
投票

你可以试试窗口函数;

select df.*
from (select df.*,
             row_number() over (partition by user order by timestamp) as seqnum
      from df
     ) df
where seqnum = 1;
© www.soinside.com 2019 - 2024. All rights reserved.