database - Postgres 通过以下方式获得组中的第一项

标签 database postgresql greatest-n-per-group

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

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

数据库看起来有点像这样: id, requestid, timestamp, message

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

我发现了类似的请求,先按请求 ID 分组,然后按请求 ID 排序,但这并没有满足我的要求。我尝试通过 requestid、id 添加 orderby,但这也将 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 限制 5; 但返回的第一项是 id 2,而不是 id 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

关于database - Postgres 通过以下方式获得组中的第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362858/

相关文章:

ios - 我想在我的 iPhone 应用程序中使用多种货币选项作为金额,是否有可用的货币 api 或数据库文件?

sql - Scala 22param limit 试图找到一个解决方法并且仍然用于理解而不是 Slick 中的纯 SQL

PHP错误,无法将图像插入数据库

sql - PostgreSQL:如何实现最小基数?

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

database - 如何防止覆盖共享约会簿中的记录?

sql - 使用通配符 - SQL

sql - 可靠的 PostgreSQL IDE/数据库开发工具

mysql - 按两列为每个用户组选择 3 条记录

mysql - 返回 MySQL 中组中的最大数字