数据库怎样比较相邻两行数据并将对应列相减

Abed666 2019-08-09 11:41:24
用sas分析一张表,怎么比较相邻两行某列数据并做减法,然后输出,求大佬指点
...全文
692 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Abed666 2019-08-18
  • 打赏
  • 举报
回复
引用 2 楼 楼下小黑的大表哥的回复:
lag(“字段值”, 向上获取的字段的行数,没有获取到的字段之后返回的默认值) over(partition by 分区字段值 order by 排序字段值)
lead(“字段值”, 向下获取的字段的行数,没有获取到的字段之后返回的默认值) over(partition by 分区字段值 order by 排序字段值)
利用上面的两个内置函数就可以解决同一列的字段值的获取。

比如:数据表 table
列字段num
1
4

求两行数据的减法
select
num-lag(num,1,0) over(order by num)
from table ;

结果为
1
3

解读
第一行进行计算,向上查找没有数字,默认为0 ,所以1-0=1
第二行进行计算,向上查找一行,数字为1,4-1=3

over为开窗函数,over(开窗依据,每个窗口的排序规则)
开窗依据
distribute by
partition by
排序规则
distribute by + sort by
partition by + order by
注:一个over只对应一个聚合函数
over子句不可单独使用
1)配合聚合函数使用,求的是每一个窗口内的聚合
聚合函数 + over子句(distribute by)
求的是整个窗口的整体聚合
聚合函数 + over子句(distribute by + sort by)
求的是截至到排序数据前的聚合 当前
执行顺序:distinct by整个窗口 ----sort by一条 -----聚合函数
2)配合row_number使用
在over窗口中加行号

看不懂我的可以去百度一下
谢谢老师!很详细!!
  • 打赏
  • 举报
回复
lag(“字段值”, 向上获取的字段的行数,没有获取到的字段之后返回的默认值) over(partition by 分区字段值 order by 排序字段值)
lead(“字段值”, 向下获取的字段的行数,没有获取到的字段之后返回的默认值) over(partition by 分区字段值 order by 排序字段值)
利用上面的两个内置函数就可以解决同一列的字段值的获取。

比如:数据表 table
列字段num
1
4

求两行数据的减法
select
num-lag(num,1,0) over(order by num)
from table ;

结果为
1
3

解读
第一行进行计算,向上查找没有数字,默认为0 ,所以1-0=1
第二行进行计算,向上查找一行,数字为1,4-1=3

over为开窗函数,over(开窗依据,每个窗口的排序规则)
开窗依据
distribute by
partition by
排序规则
distribute by + sort by
partition by + order by
注:一个over只对应一个聚合函数
over子句不可单独使用
1)配合聚合函数使用,求的是每一个窗口内的聚合
聚合函数 + over子句(distribute by)
求的是整个窗口的整体聚合
聚合函数 + over子句(distribute by + sort by)
求的是截至到排序数据前的聚合 当前
执行顺序:distinct by整个窗口 ----sort by一条 -----聚合函数
2)配合row_number使用
在over窗口中加行号

看不懂我的可以去百度一下
Edmond1023 2019-08-09
  • 打赏
  • 举报
回复
开窗行数里面有 lag与lead函数,可以获取相邻数据

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧