lagleadsql
1. ES里有類似sql的lag或lead函數的功能么
對於支持分析函數lag的資料庫(Oracle 9i或之後, SQL Server 2012開始有支持lag, lead分析函數; PostgreSQL和MySQL不知道)來說, 可以直接使用lag函數. lag分析函數的作
2. 這幾句SQL麻煩高手仔細解答一下 意義以及用法 3KS
count (*) over() total, -- total 是 count (*) over() 的別名, count (*) over() 是分析函數求總數,OVER()是分析函數的格式
cast (count(*)over() as decimal)/2 mid --同上 mid 是別名,
ceiling(cast(count(*)over() as decimal)/2) next,
row_number() over(order by UID) --row_number() 行號
分析函數語法:
FUNCTION_NAME(<argument>,<argument>...)
OVER
(<Partition-Clause><Order-by-Clause><Windowing Clause>)
例:
sum(sal) over (partition by deptno order by ename) new_alias
sum就是函數名
(sal)是分析函數的參數,每個函數有0~3個參數,參數可以是表達式,例如:sum(sal+comm)
over 是一個關鍵字,用於標識分析函數,否則查詢分析器不能區別sum()聚集函數和sum()分析函數
partition by deptno 是可選的分區子句,如果不存在任何分區子句,則全部的結果集可看作一個單一的大區
order by ename 是可選的orderby 子句,有些函數需要它,有些則不需要.依靠已排序數據的那些函數,如:用於訪問結果集中前一行和後一行的LAG和LEAD,必須使用,其它函數,如AVG,則不需要.在使用了任何排序的開窗函數時,該子句是強制性的,它指定了在計算分析函數時一組內的數據是如何排序的.
1)FUNCTION子句
ORACLE提供了26個分析函數,按功能分5類
分析函數分類
等級(ranking)函數:用於尋找前N種查詢
開窗(windowing)函數:用於計算不同的累計,如SUM,COUNT,AVG,MIN,MAX等,作用於數據的一個窗口上
例:
sum(t.sal) over (order by t.deptno,t.ename) running_total,
sum(t.sal) over (partition by t.deptno order by t.ename) department_total
製表(reporting)函數:與開窗函數同名,作用於一個分區或一組上的所有列
例:
sum(t.sal) over () running_total2,
sum(t.sal) over (partition by t.deptno ) department_total2
製表函數與開窗函數的關鍵不同之處在於OVER語句上缺少一個ORDER BY子句!
LAG,LEAD函數:這類函數允許在結果集中向前或向後檢索值,為了避免數據的自連接,它們是非常用用的.
VAR_POP,VAR_SAMP,STDEV_POPE及線性的衰減函數:計算任何未排序分區的統計值
2)PARTITION子句
按照表達式分區(就是分組),如果省略了分區子句,則全部的結果集被看作是一個單一的組
3)ORDER BY子句
分析函數中ORDER BY的存在將添加一個默認的開窗子句,這意味著計算中所使用的行的集合是當前分區中當前行和前面所有行,沒有ORDERBY時,默認的窗口是全部的分區 在Order by 子句後可以添加nulls last,如:order by comm descnulls last 表示排序時忽略comm列為空的行.
4)WINDOWING子句
用於定義分析函數將在其上操作的行的集合
Windowing子句給出了一個定義變化或固定的數據窗口的方法,分析函數將對這些數據進行操作
默認的窗口是一個固定的窗口,僅僅在一組的第一行開始,一直繼續到當前行,要使用窗口,必須使用ORDER BY子句
根據2個標准可以建立窗口:數據值的范圍(RANGES)或與當前行的行偏移量.
5)Rang窗口
Range 5 preceding:將產生一個滑動窗口,他在組中擁有當前行以前5行的集合
ANGE窗口僅對NUMBERS和DATES起作用,因為不可能從VARCHAR2中增加或減去N個單元
另外的限制是ORDER BY中只能有一列,因而范圍實際上是一維的,不能在N維空間中
例:
avg(t.sal) over(order by t.hiredate asc range 100 preceding) 統計前100天平均工資
6)Row窗口
利用ROW分區,就沒有RANGE分區那樣的限制了,數據可以是任何類型,且ORDER BY 可以包括很多列
7)Specifying窗口
UNBOUNDED PRECEDING:這個窗口從當前分區的每一行開始,並結束於正在處理的當前行
CURRENT ROW:該窗口從當前行開始(並結束)
Numeric Expression PRECEDING:對該窗口從當前行之前的數字表達式(Numeric Expression)的行開始,對RANGE來說,從從行序值小於數字表達式的當前行的值開始.
Numeric Expression FOLLOWING:該窗口在當前行Numeric Expression行之後的行終止(或開始),且從行序值大於當前行Numeric Expression行的范圍開始(或終止)
range between 100 preceding and 100 following:當前行100前,當前後100後
注意:分析函數允許你對一個數據集進排序和篩選,這是SQL從來不能實現的.除了最後的Order by子句之外,分析函數是在查詢中執行的最後的操作集,這樣的話,就不能直接在謂詞中使用分析函數,即不能在上面使用where或having子句!!!
3. 誰能解釋一下oracle中 lead lag over函數的用法
lead (field,n),按over裡面的規則排序,並取排序當前記錄field的下n個數值,lag相反。
4. 這個sql語句怎麼寫,題如下
急著去加班了,來不及寫了,你去查查oracle分析函數系--LAG和LEAD,用他們實現很簡單的
5. 功率因數表的 LAG 和 LEAD 是什麼意思
LAG 滯後 容性負載,LEAD超前 感性負載。
6. 在sqlserver 2008 怎麼配置才可以正常支持lead和lag分析函數
我剛剛安裝好,這個sqlserver 2008 r2 安裝廢了我不少時間,你按這個填入就可以啦 SQL Server 代理 NT AUTHORITY\SYSTEM SQL Server Database Engine NT AUTHORITY\NETWORK SERVICE SQL Server Analysis Services NT AUTHORITY\NETWORK SERVICE Sql Server Reporting Services NT AUTHORITY\NETWORK SERVICE SQL Server Integration Services NT AUTHORITY\NETWORK SERVICE SQL Server Browser 默認
7. sql查找對應ID記錄及它的前一條和後一條,高手請入
假設你的列名中ID值分別為 1 2 3 5 6 7 8 9
如果你的資料庫是2000:
declare @id int
set @id=5
select identity(int,1,1) as rn,* into # from tbname order by id
select *
from tbname
where rn in (@id-1,@id,@id+1)
如果資料庫是2005 :
declare @id int
set @id=5
select *
from
(
select rn=row_number()over(order by id),* from tbname
) k
where rn in (@id-1,@id,@id+1)
8. 功率因數表上的lag和lead是什麼意思
一般的來講,工業用電基本以電機等為主,我們稱這樣的負載為感性負載。感性負載的大量使用會引起電網中的無功功率增加,所以需要並入適當的電容器來補償,提高電網中有功功率的比例。電網中的電壓與電流之間的相位差就是cosφ。而LAG是滯後的意思,就是容性負載疊加在電網中起到了作用,就是你的電容櫃工作中;而LEAD是超前的意思,就是感性負載在電網中了,就像你的電容櫃壞了,那就起不到補充功率因數的作用了。
功率因數超前(LEAD)就是感性負載,功率因數滯後(LAG)就是容性負載。
計算公式:
都是=總無功功率/視在功率 總無功功率=感性無功-容性無功 最後計算結果為正,就是超前,感性負載。為負就是滯後,容性負載。
9. sql語言能做到excel中不同行中的單元格比較嗎
你說的這個用sql應該是可以實現,不過不知道其他資料庫(我用oracle的)有沒有lead和lag的函數功能,如果有的話,那麼應該是可以的。
無非就是上一行與本行的內容的比較,這個lag函數是可以實現的。
不過可能要先用什麼編個碼排序用,這樣才能才能用。用法舉例