Where
發生後出現結果的 Where 子句
我想知道是否有可能找到僅在第一次出現 where 子句之後出現的記錄。我目前在此範例中使用 PostgreSQL,但首選不是 PostgreSQL 特定的東西。
例如,如果我有這樣的表
drop table if exists dummy; create table dummy ( col_a varchar(10), col_b varchar(10), col_c varchar(10), test integer ); insert into dummy values ('A', 'B', 'C', 1), ('B', 'C', 'A', 2), ('C', 'A', 'B', 3), ('D', 'E', 'F', 4);
如果我執行以下查詢,我可以按新順序獲取數據
select * from dummy order by col_b;
返回
C | A | B | 3 A | B | C | 1 B | C | A | 2 D | E | F | 4
是否可以做一些事情,以便我只能返回在某個 where 子句之後發生的行,例如
select * from dummy /* where row appears after results 'A', 'B', 'C', 1 */ order by col_b;
要得到
B | C | A | 2 D | E | F | 4
更新
我不使用的原因
where col_b > ?
是因為它不適合重複值在我需要匹配這樣的附加列之前,它會起作用
select * from dummy where col_b > 'B' and col_c > 'C' order by col_b;
在這種情況下,它將返回最後一行,因為這兩個值都高於截止值,但在第一次出現指定行後它沒有截止。
我試圖有一個 where 子句可以辨識特定行是行
A | B | C | 1
在這種情況下
看來您正在尋找這樣的東西:
with cte as ( select * ,row_number() over(order by col_b) as rn from dummy ) select * from cte where rn > (select rn from cte where col_a = 'A' and col_b = 'B' and col_c = 'C' and test = 1 limit 1)
容易地。
WITH cte AS ( SELECT col_a, col_b, col_c, test, ROW_NUMBER() OVER (ORDER BY col_b) rn FROM dummy ) SELECT col_a, col_b, col_c, test FROM cte WHERE rn > ( SELECT rn FROM cte WHERE (col_a, col_b, col_c, test) = ('A', 'B', 'C', 1 ) ) ORDER BY rn;