基于间隔15分钟的时间对记录进行分组(MS SQL)

时间:2017-01-25 13:05:40

标签: sql sql-server group-by

我有一个每1分钟收集一次数据的监控系统。  我想以15分钟的间隔汇总收集的数据。 我用过这个:( DATEPART(分钟,date_report)/ 15)但它不起作用 有什么办法吗? 非常感谢任何帮助!

我目前的查询是:

SELECT DISTINCT fio,date_report, vocheredi,PS
 FROM
    (
    select distinct TempTable.fio,TempTable.date_report, count (distinct id) as vocheredi
,(CASE  WHEN TempTable.workgroup LIKE 'Group East' THEN 'East'
        WHEN TempTable.workgroup LIKE 'Group west' THEN 'West'
        WHEN TempTable.workgroup LIKE 'Group Centre' THEN 'Centre' END) as PS

    FROM dbo.TempTable

        WHERE
        TempTable.fio = 'employee'

        and (TempTable.workgroup = 'East' 
        or TempTable.workgroup = 'west' 
            or TempTable.workgroup = 'Centre')

            GROUP BY  TempTable.fio
                ,(CASE  WHEN TempTable.workgroup LIKE 'Group East' THEN 'East'
                    WHEN TempTable.workgroup LIKE 'Group west' THEN 'West'
                    WHEN TempTable.workgroup LIKE 'Group Centre' THEN 'Centre' END)
                        ,TempTable.date_report

                ) table
            WHERE
        PS = (@ReportParameter2)
    GROUP BY
(DATEPART (minute,date_report) / 15 ) ,fio,date_report, vocheredi,PS
ORDER BY date_report DESC

我想让它向我展示一下:

fio, date_report,vocheredi,PS
employee, 16:15:00-16:30:00 , 19,East

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我不想要16:15:00而是16:15:00到16:29:59(或类似的东西)。 我不打算重写整个脚本,但这会在四分之一小时内提供分组

DATEADD(MINUTE,DATEPART(MINUTE,DateReport)%15*-1,DateReport) 

了解这一点 DATEPART(MINUTES,DateReport)提供此分钟(1到59) %或mod函数表示从偶数15开始剩余的分钟数。

DATEADd将其缩小以获得开始的四分之一小时。