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

问题描述 投票:0回答:1

关于以下职位:

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

有什么想法吗?谢谢。

sql postgresql group-by greatest-n-per-group
1个回答
0
投票

如果要按特定顺序排列数据,则您需要具有order by] >>。 SQL表和结果集表示无序集。唯一的例外是当最外面的查询具有order by时。

SO:

order by created_at desc
© www.soinside.com 2019 - 2024. All rights reserved.