Order_by_clause 排序语句 必须需要 ,
如果没有order by 子句,就不是“连续”的。
建表语句如下:
create table SMALL_CUSTOMERS(CUSTOMER_ID NUMBER,SUM_ORDERS NUMBER);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 10);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 20);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (1000, 30);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 5);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 10);
insert into SMALL_CUSTOMERS (CUSTOMER_ID, SUM_ORDERS) values (800, 1);
Lead具体用法:
select t.customer_id,
t.sum_orders,
lead(t.sum_orders) over(partition by t.customer_id order by t.sum_orders)
from small_customers t;
用Lead实现行转列:
第一步:
select customer_id,
sum_orders,
lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
rownum rn
from small_customers t
order by rn;
第二步,过滤数据:
select *
from (select customer_id,
sum_orders,
lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
rownum rn
from small_customers t
order by t.sum_orders)
where mod(rn, 5) = 1;
第三步,组装数据:
select customer_id, sum_orders || ',' || sum_orders2 || ',' || sum_orders3
from (select customer_id,
sum_orders,
lead(t.sum_orders, 1) over(partition by customer_id order by t.sum_orders) sum_orders2,
lead(t.sum_orders, 2) over(partition by customer_id order by t.sum_orders) sum_orders3,
rownum rn
from small_customers t
order by t.sum_orders)
where mod(rn, 5) = 1;
Lag与Lead语法相同,区别是Lag表示查询其前第n条记录
select t.customer_id,
t.sum_orders,
lag(t.sum_orders) over(partition by t.customer_id order by t.sum_orders)
from small_customers t;