我的下表有两列。
表格:
create table tbl1
(
p_id int,
p_price int
);
插入:
INSERT INTO tbl1 values(1,100);
INSERT INTO tbl1 values(1,50);
INSERT INTO tbl1 values(1,20);
INSERT INTO tbl1 values(2,10);
INSERT INTO tbl1 values(2,20);
INSERT INTO tbl1 values(3,22);
INSERT INTO tbl1 values(3,89);
INSERT INTO tbl1 values(3,500);
查询:以下查询为我提供了每行的行号。
SELECT p_id,p_price,row_number() over(partition by p_id order by p_id) rn
from tbl1
我想获得每个产品ID(p_id)的第一个和最后一个插入记录。
预期结果:
p_id p_price
-----------------
1 100
1 20
2 10
2 20
3 22
3 500
答案 0 :(得分:1)
您可以使用子查询执行此操作:
SELECT p_id, p_price, rn from (
SELECT *, last_value(rn) over(partition by p_id) as last from (
SELECT p_id,p_price,row_number() over(partition by p_id order by p_id) rn
FROM tbl1
) s1
) s2 where rn=1 or rn=last;
因此,在内部选择时,您可以按分区获取行号,在上一级获得最后一行数(第一行始终为1)。 然后顶级可以进行过滤。