如何在where子句中使用row_number

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

我正在尝试使用窗口函数来获取最近的n条记录,from here之后:

我有:

select 
   id,
   blah,
   row_number () over (
     partition by blah, my_id
     order by datetime) rn,
   theme
from documents
where theme = 'cats';

我得到:

 id | blah | rn | theme 
----+-----+----+-------
  1 |   1 |  1 | cats
  2 |   1 |  2 | cats
  3 |   1 |  3 | cats
  4 |   1 |  4 | cats
  5 |   1 |  5 | cats
  9 |   2 |  1 | cats
  8 |   2 |  2 | cats
 11 |   3 |  1 | cats
 12 |   4 |  1 | cats
 13 |   5 |  1 | cats
 14 |   6 |  1 | cats
(11 rows)

哪个很棒。但我希望不超过2行,例如rn <= 2。我想像这样:

select 
   id,
   blah,
   row_number () over (
     partition by blah, my_id
     order by datetime) rn,
   theme
from documents
where theme = 'cats' and
rn <= 2;

但是我得到:

ERROR:  column "rn" does not exist
LINE 15: rn <= 1;
         ^

我知道我可以像链接的问题一样使它成为子查询,但是必须缺少将row_number放在where子句中的语法,对吗?这是什么?

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

可能需要过滤条件rn结果的having子句

    select 
       id,
       blah,
       row_number () over (
         partition by blah, my_id
         order by datetime) rn,
       theme
    from documents
    where theme = 'cats' 
    HAVING rn<= 2;
© www.soinside.com 2019 - 2024. All rights reserved.