Bonjour,
Venant de Sql Server, j'ai quelques soucis avec l'utilisation des tables temporaires.
J'ai besoin de créer une vue, et j'ai besoin d'utiliser ces tables temporaires pour obtenir le résultat, hors Mysql ne l'acceptent pas apparemment.

Le cas présent :
Imaginez une simple table avec des dates de début et de fin, comme ceci :
Du Au
01/01 30/04
01/02 31/05
01/03 31/03
01/01 28/02

Je veux mélanger toutes ces périodes et détailler les différentes périodes consécutives.
Par exemple si j'ai la première période du 01/01 au 30/04 puis la seconde du 01/02 au 31/05, je vais obtenir 3 périodes différentes :
- d'abord du 01/01 au 31/01
- puis du 01/02 au 30/04
- et enfin du 01/05 au 31/05

Voici mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE TEMPORARY TABLE debut
SELECT DISTINCT Du FROM test
UNION
SELECT DISTINCT DATE_ADD(Au, INTERVAL 1 DAY) AS Du
FROM test T1 
WHERE EXISTS (SELECT * FROM test T2 WHERE T1.Au > T2.Du AND T1.Au < T2.Au);
 
CREATE TEMPORARY TABLE fin
SELECT DISTINCT Au FROM test
UNION
SELECT DISTINCT DATE_ADD(Du, INTERVAL -1 DAY) AS Au
FROM test T1
WHERE EXISTS (SELECT * FROM test T2 WHERE T1.Du > T2.Du AND T1.Du < T2.Au);
 
SELECT Du 
,(SELECT MIN(Au) FROM fin WHERE fin.Au >= debut.Du) AS Au
FROM debut;
 
DROP TABLE debut;
DROP TABLE fin;
Je détailles d'abord les différentes dates de début puis les différentes dates de fin et ensuite je rassemble le tout. Sous Sql Server, j'utilise les CTE, c'est super pratique, cela s'insert dans la vue sans problème, mais ici je n'ai pas cette possibilité, j'ai donc utilisé des tables temporaires, mais cela ne peut à priori pas s'intégrer dans une vue.
Comment faire ?
Dans une procédure stockée ? Ce n'est pas possible pour moi.
En passant par 3 vues différentes ? Je veux éviter.
En utilisant des sous requêtes comme tables jointes ? C'est un peu lourd à écrire.
Si quelqu'un a une idée ou bien peux m'expliquer comment faire cela sous Mysql ?
Merci