Oracle SQL 从一列计算增长值

PyD

我想计算

INCOME_growth = INCOME_YTD - Income_prv_Month

我尝试了滞后功能,自我加入我无法让它工作

示例(起点)table_employee_info:

| Date        |Employee_NO|INCOME_YTD  |Date_ID|
---           |---        |---         |---    |
| 1/31/2022   |1002       |50          |202230
| 2/28/2022   |1045       |80          |202260
| 3/31/2022   |F104       |40          |202290
| 1/31/2022   |1002       |30          |202230
| 2/28/2022   |1045       |90          |202260
| 3/31/2022   |F104       |100         |202290
| 1/31/2022   |1002       |65          |202230
| 2/28/2022   |1045       |60          |202260
| 3/31/2022   |F104       |200         |202290

所需的结果将如下所示:首先,我们需要按 Employee_NO 排序,然后按日期排序。其次,计算新列 Income_prv_Month。第三,计算另一列 INCOME_growth。

| Date        |Employee_NO|INCOME_YTD  |Income_prv_Month|INCOME_growth|Date_ID|
---           |---        |---         |---             |---         |---   
| 1/31/2022   |1002       |50          |0               |50          |202230
| 1/31/2022   |1002       |30          |50              |-20         |202230
| 1/31/2022   |1002       |65          |30              |30          |202230
| 2/28/2022   |1045       |80          |0               |80          |202260
| 2/28/2022   |1045       |90          |80              |10          |202260
| 2/28/2022   |1045       |60          |90              |-30         |202260
| 3/31/2022   |F104       |40          |0               |40          |202290  
| 3/31/2022   |F104       |100         |40              |60          |202290
| 3/31/2022   |F104       |200         |100             |100         |202290

我将不胜感激任何提示或帮助

提前致谢

D-施

我认为您可以尝试使用LAG窗口函数,但真正的问题是可能没有一列可以代表我评论的预期结果的顺序,如果有一列我们可以替换为我下面的查询[column which represnt your expect order]部分

SELECT t1.*,
       LAG(INCOME_YTD,1,0) OVER(PARTITION BY Employee_NO ORDER BY date_ID ) Income_prv_Month,
       INCOME_YTD - LAG(INCOME_YTD,1,0) OVER(PARTITION BY Employee_NO ORDER BY date_ID ) INCOME_growth
FROM T t1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于另一列计算接下来的n行的平均值-SQL(Oracle)

如何基于另一列计算接下来的n行的平均值-SQL(Oracle)-先前回答的问题的更新版本

Oracle SQL 如何让数据库计算一列?

SQL:两列计算第一列和第二列的第三列总和

在一行中的一列中合并多列值Oracle SQL

在 Oracle PL/SQL 中将一列值与另一列值之间的空格进行比较

Oracle Sql获取针对另一列的每个不同值显示最多的值

Oracle SQL:获得基于另一列的不同列值的计数

oracle sql中多列表中一列的唯一值

Oracle SQL使用上一列的值查找下一行

Oracle SQL 计算方差

设置基于 SQL Server 插入的方法,其中一列从同一列计算为 Max

Oracle SQL listagg 一列多列

将列合并为一列 Oracle PL/SQL

oracle sql 一列中有两列

Oracle SQL连接字符串,基于另一列的值

根据一列中的值创建时间间隔/ SQL Oracle

Oracle SQL:循环计数在同一列中的值之间重叠

Oracle SQL在另一列中基于条件查找顺序值

Oracle SQL比较值

Oracle SQL 列比較

选择另一列匹配记录 - Oracle SQL

Oracle SQL 基于唯一列聚合数据

SQL根据另一列中的值从一列中选择值

Oracle SQL在一列中选择特定值,该列包含许多用逗号分隔的值

Oracle SQL 计算特定列中的不同值

oracle sql,id,按一列分组,多列在另一列中不同

在 Oracle SQL 中,如何找到一列中的所有值,而另一列中存在多个不同值

如何将其他列中的最大值放入另一列 - oracle sql