写一个sql语句,要求从stk_iris_kt36_setting_kojin_meisai表中取数据放入新表stk_iris_kt36_setting_kojin_d中,如果主键(employee_id)相同的数据只有一条,就不插入,如果有多条数据,就选择年月(ym)最近的一条数据插入,年月(ym)是date属性数据,要求截取前四个数字,插入新表中为年度(nendo)
时间: 2024-02-17 09:19:37 浏览: 58
往数据库插入数据,相同的不插入
可以使用以下SQL语句实现你的需求:
```sql
INSERT INTO stk_iris_kt36_setting_kojin_d (employee_id, nendo, ym, other_columns)
SELECT employee_id, SUBSTR(ym, 1, 4) AS nendo, ym, other_columns
FROM (
SELECT employee_id, ym, other_columns,
ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY ym DESC) AS rn
FROM stk_iris_kt36_setting_kojin_meisai
) t
WHERE 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
));
```
请注意将 `other_columns` 替换为实际的列名,以及根据你的数据库的语法进行适当的调整。这个SQL语句在插入数据之前对源表进行了子查询,使用了 `ROW_NUMBER()` 函数来为每个 `employee_id` 分配行号,按照 `ym` 属性的降序排列。然后,通过主查询将满足条件(行号为1或者与最大年度相同)的数据插入到新的目标表中。
阅读全文