Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 17/01/2017 11:28:15
- mortimer.pw
- Membre
Première occurrence de couple
Bonjour,
Je travaille sur un moteur 9.3 sous Cent-OS.
J'ai la table suivante :
id_perso        id_operation    id_document    jour                debut        fin            temps        quantite
00201        0001            72456649        2016-12-19        080000        081500        0.250000        27
00201        0001            72456649        2016-12-19        081500        083000        0.250000        0
00201        0001            72456649        2016-12-19        083000        084500        0.250000        0
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00217        0003            72308647        2016-12-19        105714        105758        0.012222        27
00212        0001            72308647        2016-12-19        110935        110948        0.003611        0
00209        0050            72308647        2016-12-22        145144        145515        0.058611        27
00217        0051            72308647        2016-12-22        170642        170720        0.010556        27
00217        0002            04648240        2017-01-10        094342        094602        0.038889        32
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32
00206        0011            04648240        2017-01-10        153236        153421        0.029167        32
00206        0011            04648240        2017-01-10        153755        154248        0.081389        0
00211        0010            04648240        2017-01-11        073208        073302        0.015000        32
00210        0036            04648240        2017-01-11        115652        120935        0.211944        154
Je voudrais trouver, pour chaque couple id_document+id_operation, la première occurrence, seulement s'il y a plusieurs occurrences et qu'un autre couple vient s'intercaler entre elles.
En résultat, je devrais avoir :
id_perso        id_operation    id_document    jour                debut        fin            temps        quantite
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32
Est-ce possible SANS passer par PL/pgSQL ? peut-être avec une fonction de fenêtrage (que j'ai du mal à maîtriser).
Pouvez-vous m'aiguiller, svp ?
D'avance merci pour votre aide.
Hors ligne
#2 17/01/2017 13:36:30
- rjuju
- Administrateur
Re : Première occurrence de couple
Je ne suis pas sur d'avoir compris votre besoin. Qu'entendez-vous par "un autre couple vient s'intercaler entre elles". Plus précisément quelle est votre définition de "entre".
Julien.
https://rjuju.github.io/
Hors ligne
#3 17/01/2017 14:19:03
- mortimer.pw
- Membre
Re : Première occurrence de couple
Bonjour Julien,
Par exemple, celui-ci : le couple 72308647+0003, s'intercale entre deux occurrences du couple 72308647+0001.
00212        0001            72308647        2016-12-19        091418        091727        0.052500        27
00217        0003            72308647        2016-12-19        105714        105758        0.012222        27
00212        0001            72308647        2016-12-19        110935        110948        0.003611        0
Ou encore, celui-là : le couple 04648240+0011, s'intercale deux fois, entre deux occurrences du couple 04648240+0010.
00206        0010            04648240        2017-01-10        152749        153236        0.079722        32
00206        0011            04648240        2017-01-10        153236        153421        0.029167        32
00206        0011            04648240        2017-01-10        153755        154248        0.081389        0
00211        0010            04648240        2017-01-11        073208        073302        0.015000        32
J'espère que c'est plus clair. Pas toujours facile d'énoncer un problème, désolé.
Hors ligne
#4 17/01/2017 19:00:54
- rjuju
- Administrateur
Re : Première occurrence de couple
Ce n'est pas plus clair. Pour avoir une position, il faut avoir un tri. En fonction du tri de quelle(s) colonne(s) considérez-vous le chevauchement ?
Julien.
https://rjuju.github.io/
Hors ligne
#5 18/01/2017 08:23:15
- mortimer.pw
- Membre
Re : Première occurrence de couple
Bonjour Julien,
Ah mince ! :-(
Les enregistrements doivent être triés par Id_document, Jour, Début, Fin.
Je parcours et je tombe sur le 1er couple Id_document+Id_operation.
Si j'ai une autre occurrence de ce couple, ce couple m'intéresse.
Mais en plus il faut qu'un autre couple s'intercale (deux couples identiques qui se suivent ne m'intéresse pas).
J'espère que c'est mieux.
Merci de prendre le temps de m'aider.
Hors ligne
#6 18/01/2017 11:48:28
- Marc Cousin
- Membre
Re : Première occurrence de couple
Ok, donc on doit pouvoir l'écrire comme ça:
select * from (
        select *,
               lead(globalrownum) over (partition by id_document,id_operation order by Id_document, Jour, Debut, Fin) as next_in_partition 
        from (select *,row_number() over (order by Id_document, Jour, Debut, Fin) as globalrownum from document) 
        as sorted_docs)
as filtered_docs
where next_in_partition <> globalrownum+1Mais ça devient assez peu naturel en SQL.
Marc.
Hors ligne
#7 18/01/2017 12:40:21
- mortimer.pw
- Membre
Re : Première occurrence de couple
Bonjour Marc,
Fantastique !
Une fois écrite, elle paraît évidente :-)
Je n'ai pas le reflexe de penser à row_number().
Merci beaucoup.
Hors ligne
Pages : 1