如何解决如何选择出现在 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
并且我想创建一个包含所有 DISTINCT USER 名称及其相关联的 FIRST TIMESTAMP 数据的列表。
结果应该是这样的:
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
)
但是,这对我的服务器来说是计算负担,所以我需要一种不同的方法。我一直在尝试在用户和时间戳上加入 df 本身,但我还没有得到它,对更快的方法有什么想法吗?顺便说一句,我正在雪花中这样做...
解决方法
你可以试试窗口函数;
select df.*
from (select df.*,row_number() over (partition by user order by timestamp) as seqnum
from df
) df
where seqnum = 1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。