Bonjour,
J'ai la table ci-dessous :
Je souhaite faire un rattrapage des signatures pour un client.
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 +-------------------------+--------------+---------------------+ | Id | Client | DateFin | Signature |-------------------------+--------------+----------------------+ | 1 | 1 | xxx | xxx | 2 | 2 | xxx | null | 3 | 2 | xxx | xxx | 4 | 3 | xxx | null | 5 | 3 | xxx | null | 6 | 3 | xxx | xxx | 7 | 4 | xxx | null | 8 | 5 | xxx | xxx | 9 | 5 | xxx | xxx | 10 | 6 | xxx | null +-------------------------+--------------+---------------------+
En gros si le client a souscrit en ligne, nous n'avons plus sa signature sur le nouveau produit et il faut que j'aille chercher la signature dans les anciens.
Donc l'idée est dire que je veux récupérer ma DB avec le ranking ci-dessous :
Et ne conserver que les clients qui ont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 select rank() OVER (partition by Client ORDER BY Client, DateFin desc) rnk, Id, Client, DatFin, Signature FROM Ma_Table
- au rank 1 la signature = null
- au moins un rank > 1 (les ID 7 et 10 ont la signature à null mais ça ne sert à rien de les conserver car dans tous les cas on ne trouvera pas de signature)
- et au moins l'une des lignes dont le rank > 1 n'est pas null au niveau de la signature.
La description est plutôt simple mais je tourne en boucle depuis quelques heures.
Est-ce que vous auriez une idée ?
Merci d'avance pour votre aide
Partager