Sql plqsl复制vlookup
我的查询返回下表:Sql plqsl复制vlookup,sql,oracle,plsql,Sql,Oracle,Plsql,我的查询返回下表: | CODE | DATE | VALUE | | 123 | 30/06/2012 | 11 | | 231 | 01/07/2012 | 22 | | 321 | 02/07/2012 | 11 | | 234 | 03/07/2012 | 11 | 我需要它来创建一个基于日期和值列的列。所以必须用今天的值除以前几天的值 因此,一旦查询运行,结果应该是: | CODE | DA
| CODE | DATE | VALUE |
| 123 | 30/06/2012 | 11 |
| 231 | 01/07/2012 | 22 |
| 321 | 02/07/2012 | 11 |
| 234 | 03/07/2012 | 11 |
我需要它来创建一个基于日期和值列的列。所以必须用今天的值除以前几天的值
因此,一旦查询运行,结果应该是:
| CODE | DATE | VALUE | RET |
| 123 | 30/06/2012 | 11 | |
| 231 | 01/07/2012 | 22 | 2.0 |
| 321 | 02/07/2012 | 11 | 0.5 |
| 234 | 03/07/2012 | 11 | 0.0 |
就我所知:
SELECT
CODE
DATE
VALUE
(DATE/(TO_DATE(DATE)-1)) AS RET
FROM
....
但很明显,你不能将一个日期除以另一个日期,然后期望得到一个数字
感谢能够访问列的先前值,您可以使用分析功能:
-- sample of data from your question
SQL> with t1(CODE, DATE1, VALUE1) as(
2 select 123, to_date('30/06/2012', 'dd/mm/yyyy'), 11 from dual union all
3 select 231, to_date('01/07/2012', 'dd/mm/yyyy'), 22 from dual union all
4 select 321, to_date('02/07/2012', 'dd/mm/yyyy'), 11 from dual union all
5 select 234, to_date('03/07/2012', 'dd/mm/yyyy'), 11 from dual
6 )-- the query
7 select code
8 , Date1
9 , Value1
10 , to_char(value1 / lag(value1, 1) over(order by date1), '999990.0') ret
11 from t1
12 ;
结果:
CODE DATE1 VALUE1 RET
---------- ----------- ---------- ---------
123 30/06/2012 11
231 01/07/2012 22 2.0
321 02/07/2012 11 0.5
234 03/07/2012 11 1.0
所以你想除以日期,得出这样做是愚蠢的结论。我们能帮忙吗?谢谢你的回复,我真的很感谢你的帮助。我需要查询查看date列中的日期,然后从该行获取值,并将其除以前几天日期的值。啊,谢谢Nicholas。我不知道lag函数(对SQL来说是非常新的),谢谢它!