Postgres通过以下方式获取组的第一项

Posted

技术标签:

【中文标题】Postgres通过以下方式获取组的第一项【英文标题】:Postgres get first item of a group by 【发布时间】: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。

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

【问题讨论】:

***.com/q/3800551/905902 我查看了该帖子并在第二个答案中尝试了 Postgres 答案,但这并没有按我的意愿工作。不过,我刚刚尝试了第一个分区答案,并且确实有效 【参考方案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

【讨论】:

谢谢。那行得通。在我的第一篇文章的评论中链接到的帖子中的分区答案也是如此。现在有两种不同的方法来做到这一点。谢谢

以上是关于Postgres通过以下方式获取组的第一项的主要内容,如果未能解决你的问题,请参考以下文章

在Scala中为列表中的每一行获取元组的第一项

MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0')

Postgresql 选择最后一组的第一项

从每组的第一行和最后一行获取值

取消设置不知道第一项键值的数组的第一个元素

MySQL获取group后所有组的第一条数据