【问题标题】:Something like SELECT DISTINCT ON, but for N > 1SELECT DISTINCT ON 之类的东西,但对于 N > 1
【发布时间】:2020-05-03 05:50:58
【问题描述】:

如果我想在 postgres 中获取字段的第一行或最近的单行,select distinct on 似乎很棒,see this answer

DISTINCT ON 是一种只需要 1 个条目的语法。但是如果我想要 N 个最近的条目怎么办?我将如何转换它:

CREATE VIEW your_view AS
SELECT DISTINCT ON (id) *
FROM your_table a
ORDER BY id, date DESC;

但是对于

“为每个 id 选择最近的 n=2 个条目”而不是“为每个 id 选择最近的 n=1 个条目?” ?

我假设它是按子查询分组的,但我不太明白。

【问题讨论】:

    标签: postgresql greatest-n-per-group


    【解决方案1】:

    对于 n > 1 的 查询,您通常使用窗口函数:

    select *
    from (
      select *, row_number() over (partition by id order by "date" desc" as rn
      from the_table
    ) x
    where rn <= 2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2012-03-16
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多