Vous n'êtes pas identifié(e).

#1 Général » Création d'une fonction retournant une table » 27/11/2020 20:26:38

Dev_France
Réponses : 1

Bonjour,


Mon contexte :
J'ai actuellement plusieurs tables dans ma base de données.
La plupart d'entres elles ont un champ DateInsertion.


Mon besoin :
Je souhaiterai créer une fonction qui me donne pour chacune des tables le max(DateInsertion) quand celui-ci existe, et qui me met un null si ce champ n'existe pas.
Je souhaite donc appliquer la requête SELECT MAX(DateInsertion) FROM x, où x est le résultat de la requête SELECT schemaname FROM pg_stat_user_tables
En sortie, je veux le résultat sous la forme d'une table.


Ma requête SELECT relname FROM pg_stat_user_tables
relname
DimCategorie
DimRegion
DimClient
DimProduit


Ma requête demandée
relname |  DateInsertion
DimCategorie | 11-02-2020
DimRegion | 14-02-2020
DimClient |
DimProduit | 19-02-2020


Je me demande d'ailleurs s'il est possible de faire cela dans une requête SQL simple.


Merci à vous

#3 Re : PL/pgSQL » Requête pour créer une table de variation » 19/05/2020 14:16:36

J'ai mis à jour le db-fiddle.
Tu verras que j'y ai mis un cas précis qui te montrera ma problématique.

#4 Re : PL/pgSQL » Requête pour créer une table de variation » 19/05/2020 11:07:52

Dverite,

J'ai essayé mais hélas, j'ai un classement qui ne correspond pas à un classement par date.
C'est compliqué car il faut "influencer" le champ tableau.

Je ne sais pas si une autre solution peut être possible.

#5 Re : PL/pgSQL » Requête pour créer une table de variation » 18/05/2020 13:22:44

Par contre, j'ai une requête à faire.


Le script fonctionne bien sauf pour un élément qui est important à prendre en compte.
Lorsqu'il incrémente les différentes versions, il les classe par tab_temp.

=> Or, il faudrait que l'ordre (et uniquement l'ordre) d'incrémentation se fasse par date.


Actuellement :
date     départ  arrivee    version
20/01       2           3           v2
20/01       3           5           v2
20/01       5           9           v2
21/01       2           3           v1
21/01       3           5           v1
21/01       5           9           v1


Ma cible :
date     départ  arrivee    version
20/01       2           3           v1
20/01       3           5           v1
20/01       5           9           v1
21/01       2           3           v2
21/01       3           5           v2
21/01       5           9           v2

#6 Re : PL/pgSQL » Requête pour créer une table de variation » 15/05/2020 16:49:25

Cher dverite,


Permet moi de répondre avec simpliciter :
Merci.

J'ai appliqué ta logique d'implémentation à mon cas et il marche à merveille. J'obtiens satisfaction totale.


Merci pour ce professionnalisme.

#7 Re : PL/pgSQL » Requête pour créer une table de variation » 15/05/2020 15:16:47

Du coup, on aura une ligne par numéro et par jour, avec par un exemple, un nouveau champ qui concatène toutes les valeurs arrivées et départs :

numero   date                valeurs_concat
001        20/01/2020      1-2-3-4-5-9
001        21/01/2020      1-2-3-4-5-9
001        14/06/2020      1-2-3-4-7-9


Est-ce bien cela ?
Si oui, comment composer une telle table ?

Merci à vous

#8 Re : PL/pgSQL » Requête pour créer une table de variation » 15/05/2020 14:10:49

Très bien.


Chaque numéro est composé d'un triplet de lignes (arrivée, départ) qui est sensé être identique d'un jour à l'autre :


Exemple :
Le 20/01/2020, pour le numéro 003, j'ai trois lignes
départ  arrivee
1           2
3           4
5           9


Le 21/01/2020, pour ce même numéro,
départ  arrivee
1           2
3           4
5           9
Etc. pour chaque jour.


Or, il arrive quelques jours dans l'année, ce triplet de lignes soit différent d'un jour à l'autre :
Le 14/06/2020, pour ce même numéro,
départ  arrivee
1           2
3           4
7           9


Pour cela, si pour un même numéro, j'ai des triplets différents (au moins une valeur différente) d'un jour à l'autre, alors je souhaiterai versionner mes numéros :
20/01/2020
départ  arrivee version
1           2        v1
3           4        v1
5           9        v1
21/01/2020
départ  arrivee
1           2        v1
3           4        v1
5           9        v1
14/06/2020
départ  arrivee
1           2        v2
3           4        v2
7           9        v2


J'espère avoir été suffisamment clair.


Merci à vous

#9 Re : PL/pgSQL » Requête pour créer une table de variation » 15/05/2020 11:53:28

Merci pour votre réponse.

Je souhaiterai modifier la table.

#10 PL/pgSQL » Requête pour créer une table de variation » 15/05/2020 10:18:26

Dev_France
Réponses : 16

Bonjour,


Je souhaiterai avoir des pistes de scripts pour la rédaction d'une requête qui me permettrait de versionner les lignes d'une table.
Je m'explique.
J'ai une table X :


Numéro    Date        Début    Fin
001        20/12/2020    1        2
001        20/12/2020    4        5
001        20/12/2020    7        8
001        21/12/2020    3        4
001        21/12/2020    6        7
001        21/12/2020    9        10
001        22/12/2020    1        2
001        22/12/2020    4        5
001        22/12/2020    7        8


Théoriquement, je suis sensé avec les mêmes trio de valeurs de départ et d'arrivée pour chaque jour. Or ce n'est pas le cas dans mon contexte.
Pour cela je souhaiterai versionner les numéros pour obtenir la table Y suivante :


Numéro    Date        Début    Fin    Variation
001        20/12/2020    1        2    Version 1
001        20/12/2020    4        5    Version 1
001        20/12/2020    7        8    Version 1
001        21/12/2020    3        4    Version 2
001        21/12/2020    6        7    Version 2
001        21/12/2020    9        10  Version 2
001        22/12/2020    1        2    Version 1
001        22/12/2020    4        5    Version 1
001        22/12/2020    7        8    Version 1


Pourriez vous m'éclairer sur la démarche à suivre ?


Merci à vous.

Pied de page des forums

Propulsé par FluxBB