Trafodion之LEAD和LAG窗口函数

Oracle支持很多窗口函数,包括LEAD和LAG窗口函数,用于获取下一条或上一条记录对应字段信息。Trafodion也一样,它也支持很多的窗口函数,同样也支持LEAD和LAG窗口函数,有关LEAD和LAG窗口函数的详细语法,可以参考Apache Trafodion官网SQL手册之http://trafodion.apache.org/docs/sql_reference/index.html#lead_window_functionhttp://trafodion.apache.org/docs/sql_reference/index.html#lag_window_function

基本语法与Oracle相同,如下,

LAG(expression, offset, default-value) OVER(PARTITION BY ... ORDER BY ..)
LEAD(expression, offset, default-value) OVER(PARTITION BY ... ORDER BY ..)

其中,expression可以是表中的某一个字段或者一个表达式,offset表示偏移量,表示前面/后面第几条记录对应的值,default-value表示当用LAG或LEAD取不到相应值的时候给定一个默认值。

下面我们创建一个测试表并插入测试数据,

drop table test_lead_lag;
create table test_lead_lag(
  id varchar(10) not null,
  cphm varchar(10) not null,
  create_date date not null, 
  primary key (id)
);
insert into test_lead_lag values ('1000001', 'AB7477', to_date('2015-11-30 10:18:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000002', 'AB7477', to_date('2015-11-30 10:22:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000003', 'AB7477', to_date('2015-11-30 10:28:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000004', 'AB7477', to_date('2015-11-30 10:29:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000005', 'AB7477', to_date('2015-11-30 10:39:13','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000006', 'AB7477', to_date('2015-11-30 10:45:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000007', 'AB7477', to_date('2015-11-30 10:56:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000008', 'AB7477', to_date('2015-11-30 10:57:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000009', 'AB3808', to_date('2015-11-30 11:00:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000010', 'AB3808', to_date('2015-11-30 11:10:13','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000011', 'AB3808', to_date('2015-11-30 11:15:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000012', 'AB3808', to_date('2015-11-30 11:26:12','YYYY-MM-DD HH24:mi:ss'));
insert into test_lead_lag values ('1000013', 'AB3808', to_date('2015-11-30 11:30:12','YYYY-MM-DD HH24:mi:ss'));

现在我们来测试LEAD和LAG函数,其中LEAD表示后面一条记录对应的值,LAG表示前面一条记录对应的值,

SQL>select t.id id, 
+>       lead(t.id, 1, '') over (order by t.id) next_record_id, 
+>   lag(t.id, 1, '') over (order by t.id) last_record_id,
+>       t.cphm 
+>from test_lead_lag t order by t.id asc;

ID         NEXT_RECORD_ID LAST_RECORD_ID CPHM      
---------- -------------- -------------- ----------
1000001    1000002                       AB7477    
1000002    1000003        1000001        AB7477    
1000003    1000004        1000002        AB7477    
1000004    1000005        1000003        AB7477    
1000005    1000006        1000004        AB7477    
1000006    1000007        1000005        AB7477    
1000007    1000008        1000006        AB7477    
1000008    1000009        1000007        AB7477    
1000009    1000010        1000008        AB3808    
1000010    1000011        1000009        AB3808    
1000011    1000012        1000010        AB3808    
1000012    1000013        1000011        AB3808    
1000013                   1000012        AB3808   

根据以上结果,我们可以发现,由于ID=1000001的上一条记录不存在,因此ID=1000001对应lag函数的值为”,而ID=1000013的下一条记录不存在,因此ID=1000013对应lead函数的值也为”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值