Bonjour.
J'ai besoin de collecter les 'id' de 'ma_table' sauf le dernier de chaque sous-ensemble d'un autre champ. Avec le code qui suit, cela devrait être plus clair:
Retourne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 create table ma_table ( id serial, val char(1) ) insert into ma_table ( val ) values ('A'), ('B'), ('A'), ('B'), ('B'), ('A'), ('C'), ('C') select * from ma_table
Donc je veux récupérer les id (1,2,3,4 et 7).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 id | val ----+----- 1 | A 2 | B 3 | A 4 | B 5 | B 6 | A 7 | C 8 | C (8 lignes)
J'ai trouvé une solution, mais j'ai peur d'avoir fait trop compliqué, et comme cette solution doit intégrer un ensemble plus complexe, j'aimerai la simplifier au maximum pour ne pas accroitre inutilement la complexité du projet final.
Voici la solution:
Les critiques ou autres solutions sont les bienvenus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select B.id from ( select * , max(A.rank) over ( partition by A.val ) as rank_max from ( select * , rank() over ( partition by val order by id ) as rank from ma_table ) as A ) AS B where not B.rank_max = B.rank
Partager