samsa81 a écrit :
Bonjour,
Tout à fait débutante en SQL, je n'arrive pas à coder quelquechose que je vous décris ci-dessous :
Je pars d'une table "ma_table_1" contenant les données suivantes (c'est un exemple simplifié) :
ma_table_1
Date Ville Prenom Valeur
31/03/18 Paris Marie 1
30/06/18 Paris Marie 1
30/09/18 Paris Marie 0
31/12/18 Paris Marie 0
30/06/19 Paris Marie 1
31/03/19 Toulouse Marie 1
30/09/19 Toulouse Marie 0
31/12/19 Toulouse Marie 1
31/03/30 Toulouse Marie 1
31/03/18 Paris Paul 1
30/09/19 Paris Paul 1
31/12/19 Paris Paul 0
etc...
Je cherche à obtenir la table suivante (c'est-à-dire en groupant les lignes par période sans que ces périodes ne se chevauchent) :
DateDebut DateFin Ville Prenom Valeur
31/03/18 30/06/18 Paris Marie 1
30/09/18 31/12/18 Paris Marie 0
30/06/19 30/06/19 Paris Marie 1
31/03/19 31/03/19 Toulouse Marie 1
30/09/19 30/09/19 Toulouse Marie 0
31/12/19 31/03/30 Toulouse Marie 1
31/03/18 30/09/19 Paris Paul 1
31/12/19 31/12/19 Paris Paul 0
Dans la table de départ, j'ai une situation détaillée par date. Exemple avec (Paris, Marie):
ca vaut 1 sur 31/03/18,
1 sur 30/06/18
0 sur 30/09/18
0 sur 31/12/18
1 sur 30/06/19
Chaque ligne de la table porte sur 1 et une seule date.
Je veux exprimer les mêmes infos mais par période au lieu de par date.
Dans la table d'arrivée il y aurait donc, à la place de la colonne "Date", deux colonnes "Date début de période" et "Date fin de période".
J'ai essayé en codant ceci :
insert into ma_table_finale
select min(f.Date), max(f.Date), f.Ville, f.Prenom, f.Valeur
from ma_table_initiale f
group by f.Ville, f.Prenom, f.Valeur;
Mais j'obtiens évidemment une table dans laquelle les périodes se chevauchent :
DateDébut DateFin Ville Prenom Valeur
31/03/18 30/06/19 Paris Marie 1
30/09/18 31/12/18 Paris Marie 0
31/03/19 31/03/30 Toulouse Marie 1
30/09/19 30/09/19 Toulouse Marie 0
31/03/18 30/09/19 Paris Paul 1
31/12/19 31/12/19 Paris Paul 0
Auriez-vous une idée de comment coder cela?
Merci beaucoup à ceux qui me répondront,
S
|