7
votes

Plusieurs valeurs max dans une requête

Je sais que le titre ne sonne pas très descriptif, mais c'est le meilleur que je pouvais penser:

J'ai cette table xxx

qui est en fait un Une requête très compliquée encapsulée dans une vue, mais ce n'est pas de la matière maintenant.

J'aimerais avoir pour chaque identifiant, la ligne contenant le bdate le plus élevé. Dans cet exemple, ce serait le résultat. xxx

J'ai déjà essayé xxx

mais puis il renvoie toutes les lignes, car pour chacune de la valeur de la valeur de la valeur de la valeur est différente . Cette requête est conçue dans Oracle V10 et je suis éligible uniquement à utiliser uniquement les requêtes et à ne pas créer de procédures.


0 commentaires

6 Réponses :


0
votes
select a.* from myview a, (select id, max(bdate) from myview group by id) b
where a.id = b.id and a.bdate = b.bdate

1 commentaires

Il ne renvoie pas la colonne de valeur que je veux



0
votes
SELECT id, bdate, value FROM myview
 WHERE (id, bdate) IN (SELECT id, MAX(bdate) FROM myview GROUP BY id)
(untested... I don't have Oracle available right now...)

0 commentaires

3
votes

Vous pouvez utiliser Analytics:

select 
      id, bdate, value 
    from
      (
        select
          id, bdate, value, max( bdate ) over ( partition by id ) max_bdate
        from
          myview
      )
    where
      bdate = max_bdate


0 commentaires

13
votes

Nous pouvons utiliser multiplier des colonnes dans une clause dans la clause: xxx


1 commentaires

Comment ajouteriez-vous une autre condition à cette requête - comme 'et la valeur> 500'?



5
votes

Vous pouvez utiliser une jointure interne pour filtrer uniquement les lignes maximales: xxx

Ceci imprime: xxx

Notez que cela va Renvoie plusieurs lignes pour un identifiant qui a plusieurs valeurs avec le même bdate.


0 commentaires

13
votes

Vous pouvez utiliser le max ... garder (dense_rank premier ...) construction: xxx

Ceci sera aussi efficace que la méthode analytique suggérée par Majkel (non auto-join, un seul passage sur le Données)


0 commentaires