我有一个结果集,我想从中获得与特定单元格值匹配的行之后(之前)的下n行(或前n行)。
例如,这是我的数据:
A B C
1 10 100
2 20 200
3 30 300
4 40 400
5 50 500
6 60 600
我有兴趣在C = 300的行之后获取下3行,包括C = 300的行,因此我的输出应为
A B C
3 30 300
4 40 400
5 50 500
6 60 600
使用FETCH
和OFFSET
,您需要知道该行的确切位置号,在这里我必须搜索数据条件(即C = 300所在)的位置,因此我不能假定它将是第三行。
select *
from table
order by C asc
答案 0 :(得分:0)
如果您按感兴趣的列值对行进行排序
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)行
答案 1 :(得分:0)
假设您有一个名为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