#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: 454
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: 1566
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_3Là, 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


