日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lag与lead函数

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lag与lead函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lag與lead函數 是跟偏移量相關的兩個分析函數,通過這兩個函數可以再一次查詢中取出同一字段的前N行數據(lag)和
后N行的數據(lead)做為獨立的列,從而更方便的進行數據過濾。這種操作可以代替表的自聯接,并且lag和lead有更高的效率。

over()表示lag()與lead() 操作的數據都再over()的范圍內,他里面可以使用partition by 語句(用于分組)order by 語句(用于排序)。
partition by a order by b 表示以a字段進行分組,再以b字段進行排序,對數據進行查詢。

例如: lead(field,num,defaultvalue) field 需要查找的字段,num往后查找的num行的數據,defaultvalue沒有符合條件的默認值。

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

初始化數據為

實例:
A、 獲取當前記錄的id,以及下一條記錄的id

select t.id id,lead(t.id,1,null) over (order by t.id) next_record_id,t.cphm from tb_test t order by t.id asc;

運行結果如下

-- 獲取當前記錄的id,以及上一條記錄的id select t.id id,lag(t.id,1,null) over (order by t.id) next_record_id,t.cphm from tb_test t order by t.id asc;

運行結果如下:

-- 獲取號碼牌相同的,當前記錄的id與,下一條記錄的id(使用partition by)select t.id id,lead(t.id,1,null) over (partition by cphm order by t.id) next_same_cphm_id,t.cphm from tb_test torder by t.id asc;

運行結果如下:

--查詢cphm的總數,當create_date與下一條記錄的create-date時間間隔不超過10分鐘則忽略。select cphm,count(1) total from(select t.id,t.create_date t1,lead(t.create_date,1,null) over (partition by cphm order by create_date asc) t2,(lead(t.create_date,1,null) over(partition by cphm order by create_date asc) - t.create_date) * 86400 as itvtime,t.cphmfrom tb_test torder by t.cphm,t.create_date asc) ttwhere tt.itvtime >= 600 or tt.itvtime is nullgroup by tt.cphm;

查詢結果為:

總結

以上是生活随笔為你收集整理的lag与lead函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。