1
votes

Requête SQL pour obtenir la valeur maximale d'une colonne

 entrez la description de l'image ici

J'ai ces données dans la base de données sur les utilisateurs consacrant du temps à une activité particulière.

J'ai l'intention d'obtenir les données lorsque chaque l'utilisateur a passé le nombre maximum d'heures.

Quelque chose comme ceci:

entrez la description de l'image ici

Select Id, Name, HoursSpent, Date from HoursSpent
    Where HoursSpent = (SELECT MAX(HoursSpent) FROM HoursSpent)


1 commentaires

Quels rdbms utilisez-vous?


3 Réponses :


2
votes

Vous voulez une clause de corrélation :

select hs.Id, hs.Name, hs.HoursSpent, hs.Date
from HoursSpent hs
where hs.HoursSpent = (select max(hs2.HoursSpent) 
                       from HoursSpent hs2
                       where hs2.name = hs.name
-----------------------------^ this is the correlation clause
                      );

Cela dit que pour chaque nom dans HoursSpent , choisissez la ligne qui a la valeur maximale de HoursSpent.


0 commentaires

0
votes

J'utiliserais ROW_NUMBER ici:

SELECT Id, Name, HoursSpent, Date
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY name ORDER BY HoursSpent DESC) rn
    FROM HoursSpent
) t
WHERE rn = 1;

Si à la place vous voulez trouver plus d'un enregistrement par nom qui pourrait être lié pour le nombre maximum d'heures passées , puis remplacez ROW_NUMBER par RANK.


0 commentaires

0
votes

Voici comment obtenir le nombre maximum d'heures par utilisateur:

select hs2.Id, hs2.Name, hs2.HoursSpent, hs2.Date
from HoursSpent hs2
join (
    select hs.Name, max(hs.HoursSpent)
    from HoursSpent hs
    group by hs.Name;
) hs
on hs2.Name = hs.Name and hs2.HoursSpent = hs.HoursSpent;

Maintenant, faisons un peu de participation:

select hs.Name, max(hs.HoursSpent)
from HoursSpent hs
group by hs.Name;


0 commentaires