如何在PostgreSQL中的特定列值之后获取下n行

时间:2019-01-08 23:26:20

标签: postgresql

我有一个结果集,我想从中获得与特定单元格值匹配的行之后(之前)的下n行(或前n行)。

例如,这是我的数据:

A    B   C
1   10   100
2   20   200
3   30   300
4   40   400
5   50   500
6   60   600

我有兴趣在C = 300的行之后获取下3行,包括C = 300的行,因此我的输出应为

 A    B   C
3   30   300
4   40   400
5   50   500
6   60   600

使用FETCHOFFSET,您需要知道该行的确切位置号,在这里我必须搜索数据条件(即C = 300所在)的位置,因此我不能假定它将是第三行。

select *
from table
order by C asc

2 个答案:

答案 0 :(得分:0)

如果您按感兴趣的列值对行进行排序

  SELECT *
    FROM table_name 
   WHERE column_name >= x
ORDER BY column_name
   LIMIT n

应该这样做。如果没有的话,就必须要有创意

如果您的列值是唯一的,并且您想按另一个值排序,那么

  SELECT *
    FROM table_name
   WHERE other_column >= (
    SELECT other_column
      FROM table_name
      WHERE column_value = x
         )
ORDER BY other_column
   LIMIT n

如果您的列值不是唯一的,则可以

SELECT MIN(other_column)
在内部选择中的

。这样会找到第一个匹配项(使用其他列进行排序),然后检索下一个(n-1)行

答案 1 :(得分:0)

假设您有一个名为sample的表,则可以使用嵌套查询和窗口函数来解决问题,例如:

select * 
from (
      select *, lag(c,3) over(order by c asc) as three_back  
      from sample
      where sample.c >= 300
 ) t 

where coalesce(three_back,300) = 300