如何将列的当前值与sql server和Oracle中同一列的先前值进行比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将列的当前值与sql server和Oracle中同一列的先前值进行比较相关的知识,希望对你有一定的参考价值。

我必须将列的当前值与同一列的先前值进行比较。我的条件是这样的:如果T1.C1 =上一个T1.C1和T1.C2 =上一个T1.C2和T1.C3 ='somw值'那么显示T1.C3为(prevT1.C3 +1)有人可以请让我知道如何在sql server和oracle中实现这一点

答案

它是LAG分析函数。例如(基于Oracle,Scott的示例模式;我相信MS SQL Server的工作原理与此类似,可能在语法上略有不同)。注意第5行。

SQL> WITH temp
  2       AS (SELECT empno,
  3                  ename,
  4                  sal,
  5                  LAG (sal) OVER (ORDER BY empno) prev_sal
  6             FROM emp)
  7    SELECT ename,
  8           sal,
  9           prev_sal,
 10           --
 11           CASE
 12              WHEN sal > prev_sal THEN 'higher'
 13              WHEN sal < prev_sal THEN 'lower'
 14              ELSE 'equal'
 15           END
 16              "sal compared to previous sal"
 17      FROM temp
 18  ORDER BY empno;

ENAME             SAL   PREV_SAL sal compared to previous sal
---------- ---------- ---------- ------------------------------
SMITH             920            equal
ALLEN            1600        920 higher
WARD             1250       1600 lower
JONES            2975       1250 higher
MARTIN           1250       2975 lower
BLAKE            2850       1250 higher
CLARK            2450       2850 lower
SCOTT            3000       2450 higher
KING            10000       3000 higher
TURNER           1500      10000 lower
ADAMS            1100       1500 lower
JAMES             950       1100 lower
FORD             3000        950 higher
MILLER           1300       3000 lower

14 rows selected.

SQL>
另一答案

WITH CUR_VAL AS(SELECT C1,C2,C3,..,ROW_NUMBER()OVER(ORDER BY C1)RK FROM T1),PREV_VAL AS(SELECT C1,C2,C3,... ,, ROW_NUMBER()OVER(ORDER BY) C1)+1 RK1 FROM T1)SELECT A.C1,B.C1 PREV_C1,B.RK1,FROM CUR_VAL A,PREV_VAL B WHERE A.RK = B.RK1 ORDER BY RK1

以上是关于如何将列的当前值与sql server和Oracle中同一列的先前值进行比较的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2012 如何将列的数据类型从位更改为日期字段?

SQL Server,将列中的所有值与另一个值的一些值连接起来

pyspark 将列值与另一列进行比较包含值范围

如何更改 SQL Server 中列的数据类型?

如何将当前日期和时间插入到具有 DateTime 类型列的 SQL Server 表中?

SQL server 数据类型 - Date VS Varchar(n)