Comment passer de lignes par dates à des lignes par période [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 05-06-2020 à 11:25:39
c'est pas trivial, mais pas impossible
Code :
|
dans ce cas dateFin peut etre nul, donc il faut ajouter un COALESCE (ou equivalent suivant ton système de base de données) pour utiliser datedebut
Marsh Posté le 30-05-2021 à 18:45:26
samsa81 a écrit : Bonjour, |
Le SQL permet d'administrer ta base de données,
c'est à dire que tu peux créer , modifier , supprimer : une base , une table , gérer les roles , et les utilisateurs aussi.
si c'est une modification durable de la structure de ta Bdd : tu ajoutes une colonne 'fin période'
ou
un confort de lecture : une requete pour des données sera suffisante à chaque fois.
order by ''col 1" [default = asc ; desc ] , "col 2" desc => permet de classer les 'tuples' issus de la rêquete.
ordre décroissant ou croissant.
donc du plus petit vers le plus grand.
ou de a vers z , dans le cas de 'chaine de caractère' String.
ou l'inverse.
La méthode que tu utilises est pas moche. 0 ouvre la période ; 1 ferme la période.
tu peux rester sur cette méthode.
sauf si il s'agit d'une grosse faute de conception.
Tu a utilité de conserver ce 'boolèen' ?
ou c'est vraiment un 'loupé' ?
Marsh Posté le 31-05-2021 à 08:40:59
Je pense que depuis le temps, le mec est passé à autre chose
Marsh Posté le 04-06-2020 à 23:54:28
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