首页 > 解决方案 > 选择日期时间并按日期时间查询分组

问题描述

我有一个查询,它在哪里获得每月每天的最大值。我想要做的是也得到结果的时间而不仅仅是日期。

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)

结果我得到:

结果

我上面得到的结果是正确的,但我还想查看时间,而不仅仅是每月列中的日期。列时间的数据类型已经是日期时间。如果我只选择时间,这就是结果。我想要得到的只是显示日期和时间的每月一天的最大数据。

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

约会时间

标签: sqlsql-servertsql

解决方案


使用row_number()窗口功能。partition by dateadd(day, datediff(day, 0, a.time), 0)将按天为您提供号码。Va在这里,我假设您想要基于以下最大值的行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

推荐阅读