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通过以下方式获取组的第一项的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB - 仅获取已填充文档的数组中的第一项 - 例如user.populate('posts', 'images.0')