使用分组依据和汇总创建期间迄今为止的摘要

时间:2018-10-18 12:35:30

标签: sql sql-server group-by rollup

我的数据库(SQL Server 2016)中有一个表,其中包含我正在运行的进程的度量错误。采样间隔为10分钟,因此数据如下所示:

Timestamp                  Error

'18 Oct 2019 14:00:00',    0.200
'18 Oct 2019 14:10:00',  - 0.175
'18 Oct 2019 14:20:00',  - 0.150
'18 Oct 2019 14:30:00',    0.183

我可以轻松地使用分组汇总功能按月,周,日等方式汇总此数据。但是这样做,我将获得所有日,周,月的汇总。

我如何编写查询以显示“截至日期”摘要,即

Average Error Over Period   Error

Today                        0.175
This Week                   -0.002
This Month                   0.201
This Year                    0.053
All Time                     0.027

用于计算错误的查询非常繁琐,因此我宁愿不运行多次

1 个答案:

答案 0 :(得分:1)

通常,我将其作为单独的列:

select avg(error) as total,
       avg(case when timestamp > cast(getdate() as date) then error end) as today,
       avg(case when timestamp > dateadd(day, -6, cast(getdate() as date) then error end) as this_week,
       . . .
from t;

我不确定您对“今天”,“本周”等等的确切定义是什么。以上是条件聚合的示例。

这仅通过t一次。

如果要在单独的行中这样做,则可以取消数据透视。我的首选方法是使用cross apply

with t as (
      select avg(error) as total,
             avg(case when timestamp > cast(getdate() as date) then error end) as today,
             avg(case when timestamp > dateadd(day, -6, cast(getdate() as date) then error end) as this_week,
           . . .
      from t
     )
select v.*
from t cross apply
     (values ('Total', total), ('Today', today), ('This week', this_week), . . .
     ) v(period, error);