#1 Mon 20 March 2023 16:37
- mstcx
- Participant actif
- Lieu: Nîmes
- Date d'inscription: 21 Feb 2008
- Messages: 87
Créer un identifiant = num_insee + incrément
Bonjour,
Je souhaiterai crée un identifiant qui concaténerai le champ n° Insee de commune (5c) + un n° incrémental automatique.
exemple :
01001 1
...
01001 20
01002 1
...
01002 150
etc.
J'ai idée qu'il me faut créer une séquence, mais je ne sais pas comment la remettre à zéro (à 1) pour chaque nouveau n° insee de commune.
En vous remerciant pour votre aide.
Marc
Hors ligne
#2 Mon 20 March 2023 19:17
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 426
Re: Créer un identifiant = num_insee + incrément
Bonjour,
Je ne sais pas pour quel besoin vous voulez faire ça mais ce n'est pas forcément une bonne idée.
Dès que des communes vont fusionner vous serez contraints de modifier vos identifiant.
Il est préférable d'avoir un identifiant décorrelé des attributs. Un compteur tout simple par exemple.
Hors ligne
#3 Tue 21 March 2023 09:26
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: Créer un identifiant = num_insee + incrément
Bonjour,
assez d'accord avec p.jeremie sur les id.
Pas besoin de séquence pour faire cela, utilisez plutot les windows functions (un peu complexe à appréhender, mais super puissant pour traiter/analyse les données: https://www.postgresql.org/docs/15/tuto … dow.html).
Ca permet de définir des groupes, comme group by, mais en gardant toutes les lignes dans le select (ce que ne permet pas le group by)
Code:
with tmp as ( select * from ( values ('10001'), ('10001'), ('10002'), ('10002'), ('10004'), ('10004'), ('10004'), ('10004'), ('10005'), ('10005'), ('10005')) as v(insee) ) select insee, row_number() over w as idx, format('%s_%s', insee, row_number() over w) as newid from tmp window w as (partition by insee); 10001|1|10001_1 10001|2|10001_2 10002|1|10002_1 10002|2|10002_2 10004|1|10004_1 10004|2|10004_2 10004|3|10004_3 10004|4|10004_4 10005|1|10005_1 10005|2|10005_2 10005|3|10005_3
Là, comme la partition est utilisée deux fois dans le select, elle est mise à la fin de la requête pour ne la défnir qu'une fois. row_number() est une des windows functions disponibles.
Nicolas
Dernière modification par Nicolas Ribot (Tue 21 March 2023 09:28)
Hors ligne
#4 Wed 22 March 2023 16:01
- mstcx
- Participant actif
- Lieu: Nîmes
- Date d'inscription: 21 Feb 2008
- Messages: 87
Re: Créer un identifiant = num_insee + incrément
Dès que des communes vont fusionner vous serez contraints de modifier vos identifiant.
Il est préférable d'avoir un identifiant décorrelé des attributs. Un compteur tout simple par exemple.
Ouiap, effectivement !
Merci pour cet éclairage et vos réponses (NR + PJ).
Hors ligne