【问题标题】:Postgres get first item of a group byPostgres通过以下方式获取组的第一项
【发布时间】:2019-04-21 02:49:44
【问题描述】:

我见过与此类似的问题,但似乎没有一个完全涵盖我正在尝试构建的查询。

我有一个服务器的请求日志数据库,其中包括入站和出站连接,我正在尝试获取每个请求的日志中的第一项。

数据库看起来有点像这样: id、requestid、时间戳、消息

我想按 requestid 分组,但从每个 requestid 中获取最低的 id,这将是请求的第一个日志项。

我发现了类似的按 requestid 分组然后按 requestid 排序的请求,但这并没有给出我想要的。我尝试添加 orderby requestid, id,但这也将 id 2 作为返回的第一个项目。

这是我最近的一次: select id, requestid from logs where id in (select distinct on (requestid) id from (select id, requestid from logs order by id) as foo) order by id limit 5; 但返回的第一项是 id 2,而不是 id 1。

对此的任何提示都会非常有帮助,谢谢。

【问题讨论】:

  • 我查看了该帖子并在第二个答案中尝试了 Postgres 答案,但这并没有按我的意愿工作。不过,我刚刚尝试了第一个分区答案,并且确实有效

标签: database postgresql greatest-n-per-group


【解决方案1】:

您可以通过请求 id 对组使用内部联接

select  id, requestid, timestamp, message
from logs 
inner join  (
    select min(id) as min_id , requestid 
    from logs 
    group by requestid
) t on t.min_id = logs.id and t.requestid = logs.requestid

【讨论】:

  • 谢谢。那行得通。在我的第一篇文章的评论中链接到的帖子中的分区答案也是如此。现在有两种不同的方法来做到这一点。谢谢
猜你喜欢
  • 2016-12-06
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
相关资源
最近更新 更多