Если я правильно понимаю, я бы попробовал что-то вроде этого:
-- first we find minimum values for column1, column2 variations
WITH min_values AS (
SELECT
column1,
column2,
min(column3) AS min_value
FROM
table
GROUP BY 1,2
)
-- then we find bottom 2 values for column1
,bottom_2 AS (
SELECT
column1,
min_value,
row_number() OVER (PARTITION BY column1 ORDER BY min_value ASC) AS rn
FROM
min_values
)
-- THEN we JOIN results INTO single record
SELECT
b1.column1, b2.min_value, b1.min_value
FROM
bottom_2 b1
JOIN
bottom_2 b2 ON b1.column1 = b2.column1 AND b2.rn < b1.rn
WHERE b1.rn <= 2
Я только что проверил комментарии выше и хотел бы добавить некоторые заметки.Если вы хотите найти следующее значение, упорядоченное по column2, вы должны изменить порядок с min_value на column2 в строке row_number ().В противном случае, если вы ищете следующее вставленное значение, вам нужна временная метка или какой-то идентификатор.