【发布时间】:2015-09-13 19:48:39
【问题描述】:
我在写一段plsql代码,遇到了问题。
我要做的是计算列中最近的数字和前面的数字不相等的实例数,然后循环。例如,
4
3
2
1
1
1
0
0
0
将返回 3,因为 4 在三个间隔内减少为 1。
4
4
3
2
1
0
0
将返回 0,因为 4 在最近的时间间隔内没有减少。
到目前为止我已经写了
declare
Counter BINARY_INTEGER :=1;
BEGIN
while (select YTDOVERDRAFTS from (select YTDOVERDRAFTS
from WH_ACCTDEPOSIT
where ACCTNBR = xxxxxxxxxx
order by effdate desc)) <>
(select Previous_YTDOVERDRAFTS from (select LAG(YTDOVERDRAFTS,1,0)
OVER (ORDER BY EFFDATE asc) As Previous_YTDOVERDRAFTS
from WH_ACCTDEPOSIT
where ACCTNBR = xxxxxxxxxx
order by effdate desc))
Counter := Counter + 1;
END LOOP;
END;
/
这给了我这个错误
有人知道如何解决这个问题吗?
【问题讨论】:
-
不要使用循环。请改用自联接。
-
语法为:
WHILE condition LOOP statements END LOOP;。我在您的代码中看不到LOOP关键字,只有END LOOP。 docs.oracle.com/cd/E18283_01/appdev.112/e17126/… -
你能举个例子说明我在这种情况下如何使用自联接吗?
标签: sql loops plsql while-loop