sql - PostgreSQL - 显示每个排序组的最后 N 行

标签 sql postgresql group-by greatest-n-per-group

关于以下帖子:

Retrieving the last record in each group - MySQL

Grouped LIMIT in PostgreSQL: show the first N rows for each group?

Postgresql limit by N groups

我编写了一个查询来查找按天划分的最后 3 组日志事件的最新 3 个条目,总共有 9 个条目,我设法从 postgresql 日志表中收集了以下数据:

enter image description here

我用来获取它们的查询如下:

SELECT
    *
FROM (
    SELECT
        ROW_NUMBER() OVER (PARTITION BY created_at::date ORDER BY created_at::time DESC) AS row_number,
        DENSE_RANK() OVER (ORDER BY created_at::date DESC) AS group_number,
        l.*
    FROM
        logs l
    WHERE
        account_id = 1) subquery
WHERE
    subquery.row_number <= 3
    AND group_number <= 3
LIMIT 9;

但是我遗漏了最后一步:结果按天降序“分组”(这很好)但是在每个组中按时间排序似乎不起作用。

实际上预期的顺序应该是(只显示每行的 id):

| EXISTING ROW ORDERING | EXPECTED ROW ORDERING |
| --------------------- | --------------------- |         
           52                      56
           53                      53
           56                      52
           46                      48
           48                      47 
           47                      46
           30                      30
           31                      31
           32                      32

有什么想法吗?谢谢。

最佳答案

如果您想要特定顺序的数据,那么您需要有一个order by。 SQL 表和结果集表示无序 集。唯一的异常(exception)是当最外层的查询具有 order by 时。

所以:

order by created_at desc

关于sql - PostgreSQL - 显示每个排序组的最后 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58200194/

相关文章:

java - 为什么我的方法没有删除存在的表?

postgresql - 使用 Postgresql 作为中间层。需要意见

mysql - 如何在 MySQL 中对具有多个 HAVING 值的多个列进行 GROUP BY?

mysql - 按帮助分组(按多个分组,有重复)

mysql - 如何mysql按日期分组多个左连接

c# - PostgreSQL:JSON 中的计算字段

mysql - 主动记录查询以从三个关联模型中获取数据

mysql - 如何查询最高分?

mysql - 有没有办法按与其子记录关联的最早日期对父记录进行排序?

sql - Postgres 无法连接到数据库 postgres : could not connect to server: No such file or directory?