sql - 如何在单个表中应用合并
问题描述
我想使用合并更新我的表。因此,当员工加入另一家公司时,其新的(加入日期)将在他之前的条目中更新为(退出日期)。约束(((there is no unique id and name)))(((sno, ename, dept, comp, doj, doe)))
这些是表 emp 中的属性。
这是我必须更新的表。
Sno ENAME COMP DEPT DOJ DOE
-----------------------------------------------
1 rock mi it 10-AUG-18 -
2 dock apple it 12-AUG-18 -
3 rock google it 01-AUG-70 -
4 dock samsung it 26-AUG-89 -
应用合并后它应该看起来像。
Sno ENAME COMP DEPT DOJ DOE
-----------------------------------------------
1 rock mi it 10-AUG-18 01-AUG-70
2 dock apple it 12-AUG-18 26-AUG-89
3 rock google it 01-AUG-70 -
4 dock samsung it 26-AUG-89 -
解决方案
在这种情况下,您可以直接使用更新,因为在这种情况下合并语句可能会出现问题。
UPDATE MYTABLE M1
SET M1.DOE = (SELECT DOJ FROM (SELECT M2.DOJ,
ROW_NUMBER() OVER (PARTITION BY M2.ENAME ORDER BY M2.DOJ) AS RN
FROM MYTABLE M2
WHERE M1.ENAME = M2.ENAME
AND M1.COMP <> M2.COMP
AND M2.DOJ < M1.DOJ
) WHERE RN = 1)
此外,您可以在 UPDATE 语句中使用 WHERE 子句来限制没有更改其工作的记录或第一个工作的记录,以避免使用空值进行不必要的更新。
干杯!!
推荐阅读
- python - 无法识别模型构建密钥
- laravel - Laravel 以平均价格返回餐厅
- react-native - 如何使用 React native 显示搜索栏的边框线
- node.js - 如果在 AWS cognito 中启用了 MFA,由于代码提示,我是否需要在客户端创建 js 来调用 cognitoUser.authenticateUser()?
- sql - 在 Oracle SQL 中从分层查询创建视图
- python - 如何在python中打破一长串链式赋值
- html - 导航栏没有完全覆盖
- postgresql - 分析:为什么一个查询需要这么长时间,似乎成本很低?
- r - 基于用户输入的可变高度渲染图
- excel - 从 Excel 中删除幻灯片中的图片