gpt4 book ai didi

mysql - 插入临时表的查询

转载 作者:行者123 更新时间:2023-11-29 03:03:07 25 4
gpt4 key购买 nike

我有一个包含以下字段的表 absences

id , utilisateurs_id, date_debut , date_fin,type, `statut

我将根据示例解释我的问题:

        ----------------+------------------+------------------+---------------------
|id | utilisateurs_id |date_debut | date_fin |
----------------+------------------+------------------+---------------------
| 15 | 12 |2012-01-20 |2012-01-25 |
----------------+------------------+------------------+---------------------
| 20 | 12 |2012-01-27 |2012-01-29 |
----------------+------------------+------------------+---------------------
| 23 | 17 |2012-01-20 |2012-01-2 |
----------------+------------------+------------------+---------------------
| 27 | 12 |2012-04-10 |2012-04-12 |
----------------+------------------+------------------+---------------------

我想找到一种方法来填充临时表 tempabsence,它具有与 absences 相同的字段,如果 id 有冗余,则计算 enddate 和 startdate 之间的差异,如果此差异小于 3,则 enddate 获取值开始日期的其他时间将此列插入 tempabsences

    ----------------+------------------+------------------+---------------------
|id | utilisateurs_id |date_debut | date_fin |
----------------+------------------+------------------+---------------------
| 15 | 12 |2012-01-20 |2012-01-29 |
----------------+------------------+------------------+---------------------
| 23 | 17 |2012-01-20 |2012-01-2 |
----------------+------------------+------------------+---------------------
| 27 | 12 |2012-04-10 |2012-04-12 |
----------------+------------------+------------------+---------------------

我尝试实现它,但脚本没有返回我想要的结果。

CREATE TEMPORARY TABLE tempabsences  LIKE absences;


INSERT INTO tempabsences(id ,utilisateurs_id,date_debut,tempabsences.date_fin,type,statut)
SELECT absences.utilisateurs_id ,absences.utilisateurs_id,absences.date_debut,absences.date_fin,absences.type,absences.statut
FROM absences
ORDER BY absences.date_debut ASC,absences.date_fin ASC, absences.utilisateurs_id ASC
ON DUPLICATE KEY UPDATE tempabsences.date_fin=IF(abs(DATEDIFF(tempabsences.date_fin,absences.date_debut)<3) and (tempabsences.utilisateurs_id=absences.utilisateurs_id),tempabsences.date_fin,absences.date_fin),
tempabsences.utilisateurs_id= IF(abs(DATEDIFF(tempabsences.date_fin,absences.date_debut)<3)and (tempabsences.utilisateurs_id=absences.utilisateurs_id),tempabsences.utilisateurs_id,absences.utilisateurs_id),
tempabsences.id=IF(abs(DATEDIFF(tempabsences.date_fin,absences.date_debut)<3)and (tempabsences.utilisateurs_id=absences.utilisateurs_id),tempabsences.id,(select tempabsences.id from absences ) )
;

任何帮助将不胜感激。问候。

最佳答案

我觉得应该是这样的

BEGIN
FOR rec_ IN (
SELECT absences.utilisateurs_id ,absences.utilisateurs_id,absences.date_debut,absences.date_fin,absences.type,absences.statut
FROM absences
ORDER BY absences.date_debut ASC,absences.date_fin ASC, absences.utilisateurs_id ASC
)

BEGIN
INSERT INTO tempabsences(rec_.id ,rec_.utilisateurs_id,rec_.date_debut,rec_.tempabsences.rec_.date_fin,rec_.type,rec_.statut);
EXCEPTION
WHEN dup_val_on_index THEN

for rec2_ in (SELECT * FROM tempabsences WHERE id = rec_.utilisateurs_id) loop

if rec2_.date_fin - rec2_.date_debut < 3 then

update absences
set date_fin = date_debut
where utilisateurs_id = rec_.utilisateurs_id;

else
----- else statement here
end if;
end loop;

END;

END;

关于mysql - 插入临时表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com