在 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;
大家好,我有一个 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;