关于以下帖子:
Retrieving the last record in each group - MySQL
Grouped LIMIT in PostgreSQL: show the first N rows for each group?
我编写了一个查询来查找按天划分的最后 3 组日志事件的最新 3 个条目,总共有 9 个条目,我设法从 postgresql 日志表中收集了以下数据:
我用来获取它们的查询如下:
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/