如何 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;
所以我有如下数据:
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;