本文主要记录SQL-跨行计算/lag()/lead()相邻两行某列数据四则计算的相关笔记,这两个函数可以获取当前行的后一行数据或者前一行数据,可以用于计算每日或者每此记录的增量计算,或者计算相邻两行某列差值。文章也使用sum()函数,rows n preceding语法进行累加运算。
lag()指获取当前行当前列第前n行当前列数据,完整函数参数如下:
lag(list_name,offset,default_value)
·list_name:列名
·offset:偏移的offset,获取当前行当前列的第前offset行当前列数据。
·default_value:如果偏移位置没有数据,则取default_value。
现有一张表table1,里面由三列数据(“id”,“name”,“num”),具体内容如下:
下面我们根据name分组,以num从小到大进行排序,然后使用lag()获取前一行数据命名为列lo。
代码如下:
select name,num,lag(num,1,0)over(partition by name order by num)lo from table1
执行结果如下:
lag()指获取当前行当前列第后n行当前列数据,完整函数参数如下:
lead(list_name,offset,default_value)
参数解释同lag(),同样使用table1表来进行举例。
下面根据name分组,以num从小到大进行排序,然后使用lead()获取后一行数据命名为列lo。
代码如下:
select name,num,lead(num,1,0)over(partition by name order by num)lo from table1
执行结果如下:
获取num列从第1行到当前行的累加和数据,以name进行分组,完整函数参数如下:
sum(num)over(partition by name order by num)
查询结果
对截至至当前日期共7天的数据进行列(“column1”)累加计算,此时number取值为6,完整函数参数如下:
select date1,sum(column1)over(order by date1 rows 6 preceding) from table1
本文发布于:2024-01-28 04:58:03,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063890864949.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |