写一个sql语句,要求从stk_iris_kt36_setting_kojin_meisai表中取数据(employee_id,ym),将stk_iris_kt36_setting_kojin_d中的数据更新(employee_id,nendo)*,如果主键(employee_id)相同的数据只有一条,就不插入,如果有多条数据,就选择年月(ym)最近的一条数据插入,年月(ym)是date属性数据,要求截取前四个数字,更新新表中为年度(nendo)
时间: 2024-04-11 08:26:05 浏览: 117
可以使用以下SQL语句实现你的需求:
```sql
UPDATE stk_iris_kt36_setting_kojin_d d
SET nendo = (
SELECT SUBSTR(ym, 1, 4) AS nendo
FROM (
SELECT employee_id, ym,
ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY ym DESC) AS rn
FROM stk_iris_kt36_setting_kojin_meisai
) t
WHERE t.employee_id = d.employee_id
AND (rn = 1 OR (rn > 1 AND SUBSTR(ym, 1, 4) = (
SELECT MAX(SUBSTR(ym, 1, 4))
FROM stk_iris_kt36_setting_kojin_meisai
WHERE employee_id = t.employee_id
)))
)
WHERE EXISTS (
SELECT 1
FROM stk_iris_kt36_setting_kojin_meisai m
WHERE m.employee_id = d.employee_id
);
```
请注意将 `stk_iris_kt36_setting_kojin_d`、`stk_iris_kt36_setting_kojin_meisai` 替换为实际的表名,以及根据你的数据库的语法进行适当的调整。这个SQL语句使用了子查询来获取满足条件(行号为1或者与最大年度相同)的年度,并将其更新到 `stk_iris_kt36_setting_kojin_d` 表中的 `nendo` 列。同时,通过主查询将满足条件(存在于 `stk_iris_kt36_setting_kojin_meisai` 表中)的数据进行更新。
阅读全文