Lag和Lead函数

本文介绍了如何使用LAG和LEAD窗口函数进行高效查询,并通过示例展示了如何获取表中每一记录前后行的数据,以及如何进一步计算相邻记录间的日期差。

lag(exp,N,defval) over(partition by ... order by ...)
lead(exp,N,defval) over(partition by ... order by ...)
 

LagLead函数可以在一次查询中取出同一字段的前N行的数据和后N行的值。这种操作可以使用对相同表的表连接来实现,不过使用LAGLEAD有更高的效率。Lag函数为Lag(exp,N,defval)defval是当该函数无值可用的情况下返回的值。Lead函数的用法类似。LeadLag函数也可以使用分组。

 

以下是LAGLEAD的例子:

先创建示例表:

 

-- Create table

create table LEAD_TABLE

(

  CASEID     VARCHAR2(10),

  STEPID     VARCHAR2(10),

  ACTIONDATE DATE

)

tablespace COLM_DATA

  pctfree 10

  initrans 1

  maxtrans 255

  storage

  (

    initial 64K

    minextents 1

    maxextents unlimited

  );

 

insert into LEAD_TABLE values('Case1','Step1',to_date('20070101','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step2',to_date('20070102','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step3',to_date('20070103','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step4',to_date('20070104','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step5',to_date('20070105','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step4',to_date('20070106','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step6',to_date('20070101','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case1','Step1',to_date('20070201','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case2','Step2',to_date('20070202','yyyy-mm-dd'));

insert into LEAD_TABLE values('Case2','Step3',to_date('20070203','yyyy-mm-dd'));

commit;

 

每一条记录都能连接到上/下一行的内容

 

select  caseid,  stepid,  actiondate,

lead(stepid) over (partition by caseid order by actiondate) nextstepid,

lead(actiondate) over (partition by caseid order by actiondate) nextdate,

lag(stepid) over (partition by caseid order by actiondate) prestepid,

lag(actiondate) over (partition by caseid order by actiondate) predate

from lead_table

 

结果如下:

 

caseid   stepid    actiondate   nextstepid  nextdate   prestepid     predate

Case1    Step1    2007-1-1     Step2       2007-1-2       

Case1    Step2    2007-1-2     Step3       2007-1-3    Step1    2007-1-1

Case1    Step3    2007-1-3     Step4       2007-1-4    Step2    2007-1-2

Case1    Step4    2007-1-4     Step5       2007-1-5    Step3    2007-1-3

Case1    Step5    2007-1-5     Step4       2007-1-6    Step4    2007-1-4

Case1    Step4    2007-1-6     Step6       2007-1-7    Step5    2007-1-5

Case1    Step6    2007-1-7      Step4      2007-1-6

Case2    Step1    2007-2-1     Step2       2007-2-2       

Case2    Step2    2007-2-2     Step3       2007-2-3    Step1    2007-2-1

Case2    Step3    2007-2-3     Step2       2007-2-2

 

还可以进一步统计一下两者的相差天数

 

select caseid,   stepid,   actiondate,   nextdate,

        nextdate-actiondate datebetween

from (

select caseid,   stepid,   actiondate,

lead(stepid) over (partition by caseid order by actiondate) nextstepid,

lead(actiondate) over (partition by caseid order by actiondate) nextdate,

lag(stepid) over (partition by caseid order by actiondate)  prestepid,

lag(actiondate) over (partition by caseid order by actiondate) predate

from lead_table)

 

结果如下:

 

caseid   stepid    actiondate   nextdate   datebetween

Case1    Step1    2007-1-1    2007-1-2    1

Case1    Step2    2007-1-2    2007-1-3    1

Case1    Step3    2007-1-3    2007-1-4    1

Case1    Step4    2007-1-4    2007-1-5    1

Case1    Step5    2007-1-5    2007-1-6    1

Case1    Step4    2007-1-6    2007-1-7    1

Case1    Step6    2007-1-7       

Case2    Step1    2007-2-1    2007-2-2    1

Case2    Step2    2007-2-2    2007-2-3    1

Case2    Step3    2007-2-3  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14613712/viewspace-617031/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14613712/viewspace-617031/

内容概要:本文围绕“基于分布式模型预测控制的多个固定翼无人机一致性控制”展开,利用Matlab代码实现相关算法的仿真,旨在通过分布式控制策略实现多架固定翼无人机在复杂动态环境中的协同飞行与一致性控制。研究结合模型预测控制(MPC)方法,构建适用于多无人机系统的分布式优化框架,重点解决了通信受限、信息延迟及无中心化指挥条件下的协同稳定性问题。内容涵盖固定翼无人机的动力学建模、分布式MPC优化求解机制、一致性协议设计、通信拓扑结构分析以及仿真验证全过程,确保多机系统在保持队形一致的同时完成协同任务。; 适合人群:具备自动控制理论、无人机系统建模或多智能体协同控制基础,从事智能无人系统、集群控制、自动化与机器人等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多无人机协同编队飞行、集群侦察、分布式任务执行等实际工程场景;②为分布式MPC算法在多智能体系统中的一致性控制提供可复现的Matlab仿真案例,推动先进控制理论向工程实践转化;③服务于科研论文复现、算法验证、控制系统课程设计与毕业课题参考。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行与调试,重点关注分布式MPC在不同通信拓扑下对一致性收敛性能的影响,并可通过调整预测时域、权重矩阵与噪声参数等方式深化对算法鲁棒性与适应性的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值