update 与 lag函数

现在 2014-09-01 04:36:49

SELECT * FROM EMP;
CREATE TABLE t AS SELECT * FROM emp WHERE 1=2;
INSERT INTO t(empno) SELECT empno FROM emp;
SELECT EMPNO, SAL FROM T ORDER BY HIREDATE;

--嵌套两次
UPDATE T
SET SAL =
(SELECT EN
FROM (SELECT EMPNO, LAG(EMPNO, 1, 0) OVER(ORDER BY HIREDATE) EN
FROM EMP) TMP
WHERE TMP.EMPNO = T.EMPNO)
WHERE T.EMPNO > 7788;

SELECT EMPNO, SAL FROM T ORDER BY HIREDATE;
empno sal
------ -----------
7369
7499
7521
7566
7654
7698
7934 7902.00
7788
7839 7654.00
7844 7782.00
7876 7788.00
7900 7839.00
7902 7900.00
7782

--嵌套一次
UPDATE T
SET SAL =
(SELECT LAG(EMPNO, 1, 0) OVER(ORDER BY HIREDATE) EN
FROM EMP
WHERE EMP.EMPNO = T.EMPNO)
WHERE T.EMPNO > 7788;

SELECT EMPNO, SAL FROM T ORDER BY HIREDATE;
empno sal
------ --------
7369
7499
7521
7566
7654
7698
7934 0.00
7788
7839 0.00
7844 0.00
7876 0.00
7900 0.00
7902 0.00
7782

问题是,嵌套一次的update语句更新后 ,sal的值为0呢???

update语句不能直接用lag函数么?
...全文
109 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 zlloct 的回复:
[quote=引用 楼主 kuaileyangle 的回复:]
UPDATE T SET SAL = (SELECT LAG(EMPNO, 1, 0) OVER(ORDER BY HIREDATE) EN FROM EMP WHERE EMP.EMPNO = T.EMPNO) WHERE T.EMPNO > 7788; 当你WHERE EMP.EMPNO = T.EMPNO加上这个条件的时候其实每次只要一条记录,一条记录再用LAG函数处理,这条唯一的记录的不存在上下相邻的条记录。 所以。。。。[/quote] 明白了,谢谢版主!!
CT_LXL 2014-09-01
  • 打赏
  • 举报
回复
引用 楼主 kuaileyangle 的回复:
UPDATE T SET SAL = (SELECT LAG(EMPNO, 1, 0) OVER(ORDER BY HIREDATE) EN FROM EMP WHERE EMP.EMPNO = T.EMPNO) WHERE T.EMPNO > 7788; 当你WHERE EMP.EMPNO = T.EMPNO加上这个条件的时候其实每次只要一条记录,一条记录再用LAG函数处理,这条唯一的记录的不存在上下相邻的条记录。 所以。。。。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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