在 Postgres 中寻找 min + 1

Finding min + 1 in Postgres

大家好,我有一个 postgres table,其中有一列用于事件,一列用于序列。每个事件可能有多个序列。例如:

Event  |   Sequence
a      |    1
a      |    4
a      |    5
b      |    1
b      |    2

现在我知道 select min(sequence) 按事件分组给了我最小序列。我如何获得最小值之后的下一个值。我希望这是有道理的。提前致谢。 我正在使用 Postgres 9.3。

EDIT有点复杂,但是如果你需要一个不依赖于ROW_NUMBER()的查询,使用带有自连接的子查询来排除行每个事件的最小顺序:

SELECT outer_query.Event, MIN(outer_query.Sequence) AS SecondMinSeq
FROM Table1 as outer_query
INNER JOIN (
    SELECT Table1.Event, MIN(Sequence) AS MinSeq
    FROM Table1
    GROUP BY Table1.Event
) AS min_sequences
ON outer_query.Event = min_sequences.Event AND outer_query.Sequence <> min_sequences.MinSeq
GROUP BY outer_query.Event

SQL Fiddle: http://sqlfiddle.com/#!15/4438b/7

您可以使用 ROW_NUMBER()Event 分区并按 Sequence 排序以获得每个事件的第二小序列号;

SELECT Event, Sequence 
FROM (
  SELECT Event, Sequence, 
         ROW_NUMBER() OVER (PARTITION BY Event ORDER BY Sequence) rn
  FROM Table1
) z
WHERE rn = 2;

An SQLfiddle to test with.