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

3

关于以下帖子:

在MySQL中检索每个组中的最后一条记录

PostgreSQL中分组取前N行的方法

PostgreSQL中限制前N个组的数据

我编写了一个查询语句,用于查找按日分区的最后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


有什么想法吗?谢谢。
1个回答

2
如果你想按特定顺序获取数据,那么你需要使用order by。SQL表和结果集表示无序集合。唯一的例外是当最外层查询有order by时。
order by created_at desc

2
@kstratis . . . 很容易忘记结果集是无序的,特别是当它们由底层算法看起来有序时。 - Gordon Linoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接