视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLSERVER中LEAD和LAG函数
2020-11-09 13:48:38 责编:小采
文档


SQL SERVER中LEAD和LAG函数 LEAD和LAG函数 LEAD 访问相同结果集的后续行中的数据,而不使用 SQL Server 2012 中的自联接。 LEAD 以当前行之后的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与后续行中的值进行比较。

  SQL SERVER中LEAD和LAG函数

  LEAD和LAG函数

  LEAD

  访问相同结果集的后续行中的数据,而不使用 SQL Server 2012 中的自联接。 LEAD 以当前行之后的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与后续行中的值进行比较。

  语法:LEAD ( scalar_expression [ ,offset ] , [ default ] ) OVER ( [ partition_by_clause ] order_by_clause )

  scalar_expression,要返回的值基于指定的偏移量。 这是一个返回单个(标量)值的任何类型的表达式。scalar_expression 不能为分析函数

  offset默认值为1, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset 不能是负数值或分析函数。

  default默认值为NULL, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset不能是负数值或分析函数。

  LAG

  访问相同结果集的先前行中的数据,而不使用 SQL Server 2012 中的自联接。 LAG 以当前行之前的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与先前行中的值进行比较。

  下面看一组SQL语句:

  WITH test

  as

  (

  select NULL as score

  UNION ALL

  select 10

  UNION ALL

  select 20

  UNION ALL

  select 30

  UNION ALL

  select 40

  UNION ALL

  select 50

  )

  select ROW_NUMBER() over(order by score) as rownum

  ,score

  ,LEAD(score) over(order by score) as nextscore1

  ,LEAD(score,1) over(order by score) as nextscore2

  ,LEAD(score,1,0) over(order by score) as nextscore3

  ,LEAD(score,2) over(order by score) as nextscore4

  ,LAG(score) over(order by score) as previousscore1

  ,LAG(score,1) over(order by score) as previousscore2

  ,LAG(score,1,0) over(order by score) as previousscore3

  ,LAG(score,2) over(order by score) as previousscore4

  from test

  结果前半部分:

  rownum score nextscore1 nextscore2 nextscore3 nextscore4

  1 NULL 10 10 10 20

  2 10 20 20 20 30

  3 20 30 30 30 40

  4 30 40 40 40 50

  5 40 50 50 50 NULL

  6 50 NULL NULL 0 NULL

  LEAD(score)over(order by score)与LEAD(score,1)over(order by score)相同,基于SCORE升序取下一个score。

  LEAD(score,Y)over(order by score)公式:按score升序排列第X行计算LEAD(score,Y)over(order by score)为第X+Y行的值。

  对第X行求LEAD(score)over(order by score),值为第X+1行的值。见列nextscore1和nextscore2。

  对第X行求LEAD(score,2)over(order by score),值为第X+2行的值。见列nextscore4。

  对于第6行,由于没有第7行数据,所以LEAD求出的值为NULL。如果指定默认值,则返回指定默认值。,,如LEAD(score,1,0)最后一行返回0。见netsocre3列。

  结果后半部分:

  rownum score previousscore1 previousscore2 previousscore3 previousscore4

  1 NULL NULL NULL 0 NULL

  2 10 NULL NULL NULL NULL

  3 20 10 10 10 NULL

  4 30 20 20 20 10

  5 40 30 30 30 20

  6 50 40 40 40 30

  跟LEAD非常相似,只是LAG是往前求值。

下载本文
显示全文
专题