Как я могу получить следующие n строк после определенного значения столбца в postgresql - PullRequest
0 голосов
/ 09 января 2019

У меня есть результирующий набор, из которого я хочу получить следующие n строк (или предыдущие n строк) после (до) строки, соответствующей определенному значению ячейки.

Так, например, вот мои данные:

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

Мне интересно получить следующие 3 строки после строки, где C = 300, включая строку C = 300, поэтому мой вывод должен быть

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

С FETCH и OFFSET вам нужно знать точный номер позиции строки, здесь я должен искать, где находится условие данных, т.е. C = 300, поэтому я не могу предположить, что это будет 3-я строка .

select *
from table
order by C asc

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Предполагая, что у вас есть таблица с именем 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
0 голосов
/ 09 января 2019

Если ваши строки упорядочены по интересующему вас значению столбца, то

  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) строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...