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函数是可以实现的。
不过可能要先用什么编个码排序用,这样才能才能用。用法举例