sql - 根据创建的时间戳消除行

标签 sql postgresql greatest-n-per-group

我需要一些帮助来为相同的电子邮件使用不同的 uuid 转换此表,并仅获取具有 min(timestamp) 的行,消除其他行

示例数据:

UUID   email       created_timestamp  
  1    a@g.com        2017-05-01
  2    a@g.com        2018-05-01
  3    a@g.com        2018-05-20
  4    b@g.com        2017-04-01
  5    b@g.com        2017-06-01

预期输出:

UUID   email       created_timestamp 
  1    a@g.com        2017-05-01
  4    b@g.com        2017-04-01

我尝试过使用 group by,但它让我按 UUID 分组,在这种情况下没有意义

最佳答案

SELECT
  *
FROM
(
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY email
                           ORDER BY created_timestamp
                      )
                        AS SequenceID
  FROM
    yourTable
)
  sorted
WHERE
  SequenceID = 1

关于sql - 根据创建的时间戳消除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50469434/

相关文章:

database - INSERT ...RETURNING .. 当 BEFORE 触发器取消语句时变为空

java - Spring Data JPA - 保存重复的复合键时不会出现任何错误

java - 从 Java 调用 PHP

sql - 显示 Oracle 表的列名

java - 重构: Clean dao code for a query with multiple optional params

postgresql - 得到数字除法的精确结果

php - MYSQL:每组最大的问题

sql - 如何获取 PostgreSQL 中每个用户的最后编辑帖子?

mysql - 带有内连接的 SQL max()

sql - select 语句列出范围内的数字