J'ai une requête où il obtient la valeur maximale par jour du mois. Ce que je voulais faire, c'est aussi obtenir l'heure du résultat et pas seulement la date.

SELECT convert(date,a.time)  AS monthly, MAX(a.Va) AS monthlyVA, MAX(a.vb) AS monthlyVB
FROM tbl_sample a
WHERE DATEPART(month, a.time) = 10 and DATEPART(year, a.time) = 2018
GROUP by convert(date,a.time)

Résultat que j'obtiens:

Result

Les résultats que j'obtiens ci-dessus sont corrects, mais je souhaite également afficher l'heure et non seulement la date dans la colonne mensuellement. Le type de données de l'heure de la colonne est déjà datetime. Voici le résultat si je sélectionne juste l'heure. Ce que je veux obtenir, ce sont uniquement les données maximales par jour du mois affichant la date et aussi l'heure.

SELECT a.time  AS monthly, MAX(a.Va) AS monthlyVA, MAX(a.vb) AS monthlyVB
FROM tbl_sample a
WHERE DATEPART(month, a.time) = 10 and DATEPART(year, a.time) = 2018
GROUP by time

datetime

0
Miku Hatsune 20 nov. 2018 à 08:26

3 réponses

Meilleure réponse

Utilisez la fonction de fenêtre row_number(). partition by dateadd(day, datediff(day, 0, a.time), 0) vous donnera le nombre par jour. Ici, je suppose que vous vouliez la ligne basée sur la valeur maximale de Va suivie de Vb

SELECT *
FROM
(
    SELECT *, 
           rn = row_number() over (partition by dateadd(day, datediff(day, 0, a.time), 0)
                                       order by a.Va desc, a.Vb desc)
    FROM   tbl_sample a
    WHERE  DATEPART(month, a.time) = 10 and DATEPART(year, a.time) = 2018
) d
WHERE d.rn = 1
0
Squirrel 20 nov. 2018 à 06:28

Vous pouvez simplement utiliser CONVERT(datetime,a.time) à la place de CONVERT(date,a.time) dans votre requête.

Si votre besoin est différent, pourriez-vous s'il vous plaît envoyer des exemples de données, pour le moment, je ne suis pas très clair.

-1
Dev 20 nov. 2018 à 05:49

Vous pouvez essayer d'utiliser une sous-requête corrélée

SELECT a.time  AS monthly, a.Va AS monthlyVA, a.vb AS monthlyVB
FROM tbl_sample a
WHERE DATEPART(month, a.time) = 10 and DATEPART(year, a.time) = 2018
and exists 
(select 1 from tbl_sample b where convert(date,a.time)=convert(date,b.time) 
 group by GROUP by convert(date,a.time) having max(b.Va)=a.Va and max(b.Vb)=a.Vb
)
0
Fahmi 20 nov. 2018 à 06:28