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

How to select the first timestamp that appears in a distinct query in SQL?

所以我有如下数据:

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 顺便说一句...

您可以尝试 window 个函数;

select df.*
from (select df.*,
             row_number() over (partition by user order by timestamp) as seqnum
      from df
     ) df
where seqnum = 1;