【问题标题】:How to select the first timestamp that appears in a distinct query in SQL?如何选择出现在 SQL 中不同查询中的第一个时间戳?
【发布时间】:2021-05-19 17:18:31
【问题描述】:

所以我有如下数据:

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,但我还没有得到它,有更快的方法的想法吗?顺便说一句,我在 Snowflake 中这样做......

【问题讨论】:

  • 它实际上是标准 SQL:ANSI ,请忽略 MySQL @Akina 的任何提及

标签: sql timestamp distinct snowflake-cloud-data-platform ansi


【解决方案1】:

你可以试试窗口函数;

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

【讨论】:

  • 这很好,但我仍然希望在 USER AND TIMESTAMP 上看到 DF 与 ITSELF 的加入
猜你喜欢
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多