2 votes

supprimer les résultats de la requête si le groupe est nul

J'ai le tableau ci-dessous :

Critères :

Ne pas montrer les résultats pour le grpid s'il y a un null custuserid pour tous les grpid

grpid 145 devrait être considéré comme un custuserid sur la deuxième ligne.

Custid    grpid   custuserid   date
  101       145                12/30/19
  101       145     dellf      1/1/20
  101       255     dellf      1/1/20
  201       456                1/1/20
  201       555     smithr     1/1/20

output:

Custid    grpid   custuserid   date
  101       145                12/30/19
  101       145     dellf      1/1/20
  101       255     dellf      1/1/20
  201       555     smithr     1/1/20

La meilleure façon de filtrer ces résultats ?

Je pensais first_value pourrait être utilisé, mais existe-t-il une meilleure méthode ?

1voto

GMB Points 188687

Je voudrais simplement utiliser exists :

select t.*
from mytable t
where exists (
    select 1 from mytable t1 where t1.grpid = t.grpid and t1.custuserid is not null
)

La sous-requête corrélée permet de s'assurer qu'au moins un enregistrement avec la même grpid a une valeur non nulle custuserid . Pour des raisons de performance, vous voulez un index sur (grpid, custuserid) .

Vous pouvez également utiliser les fonctions de la fenêtre :

select *
from (
    select t.*, max(custuserid) over(partition by grpid) max_custuserid 
    from mytable t
) t
where max_custuserid is not null

Ou bien, vous pouvez joindre une requête agrégée :

select t.*
from mytable t
inner join (
    select 
        grpid, 
        max(custuserid) 
    from mytable 
    group by grpid 
    having max(custuserid) is not null
) x on x.grpid = t.grpid

L'option la plus performante dépend de votre ensemble de données (taille, cardinalité, ...).

1voto

Essayez la requête suivante

select * from temp1 where grpid not in (select grpid from temp1 group by grpid having count(custorid)=0)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X