选择日期时间和按日期查询分组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择日期时间和按日期查询分组相关的知识,希望对你有一定的参考价值。

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

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)

结果我得到:

Result

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

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

答案

使用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
另一答案

您可以尝试使用相关子查询

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
)
另一答案

您可以在查询中使用CONVERT(datetime,a.time)代替CONVERT(date,a.time)

如果您的要求有所不同,那么请您发送一些示例数据,现在我不太清楚。

以上是关于选择日期时间和按日期查询分组的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sql 和按日期分组显示指标在日期上的累积增长?

猫鼬日期比较没有时间和按多个属性分组?

具有分组和按日期排序的复杂 sum()

猫鼬日期比较没有时间和按createdAt和staffId分组,每周、每月和每年按聚合计算的员工总数?

SUM 行、返回计数和按日期排序

MDX 查询以对具有特定日期范围的日期维度进行分组