需要查询 - 确定每分钟的行数

Hos*_*146 5 t-sql sql-server

为了使事情变得非常简单,请说我有一个SQL Server 2008表,其中一列具有日期时间数据类型.我想要一个产生每分钟间隔行数的查询.例如,结果如下所示:

7/3/2011 14:00:00 | 1000
7/3/2011 14:01:00 | 1097
7/3/2011 14:02:00 |  569
Run Code Online (Sandbox Code Playgroud)

第一行意味着1000行的日期时间值介于7/3/2011 13:59:00和7/3/2011 14:00:00之间.

第二行意味着1097行的日期时间值介于7/3/2011 14:00:00和7/3/2011 14:01:00之间.

第三行意味着569行的日期时间值介于7/3/2011 14:01:00和7/3/2011 14:02:00之间.

谢谢.

Jon*_*ton 13

这个:

;WITH CTE_ExampleData as (
    select stamp = '07/07/2011 14:00:01'
    union select stamp = '07/07/2011 14:00:02'
    union select stamp = '07/07/2011 14:00:03'
    union select stamp = '07/07/2011 14:01:01'
    union select stamp = '07/07/2011 14:01:02'
    union select stamp = '07/07/2011 14:01:03'
    union select stamp = '07/07/2011 14:01:04'
    union select stamp = '07/07/2011 14:02:02'
    union select stamp = '07/07/2011 14:02:03'
    union select stamp = '07/07/2011 14:02:04'
    union select stamp = '07/07/2011 14:02:05'
)
 select 
    stamp = dateadd(mi,datediff(mi,0,stamp) + 1,0),
    rows = count(1)
 from CTE_ExampleData
 group by dateadd(minute,datediff(mi,0,stamp)+1,0)
Run Code Online (Sandbox Code Playgroud)

返回

stamp                       rows
2011-07-07 14:01:00.000     3
2011-07-07 14:02:00.000     4
2011-07-07 14:03:00.000     4
Run Code Online (Sandbox Code Playgroud)

  • CTE是示例数据,表明它的名称是"CTE_ExampleData"!只需选择主要选项并更改表名称和列名称即可. (2认同)

Cha*_*ana 10

简单组:

 Select DateAdd(minute, DateDiff(minute, 0, [colName]), 0), Count(*)
 From [tableName]
 Group By DateAdd(minute, DateDiff(minute, 0, [colName]), 0)
Run Code Online (Sandbox Code Playgroud)

如果您希望输出中某个范围内的每分钟,无论该分钟内是否有任何数据,请使用公用表表达式(CTE):

 Declare @startMinute smalldatetime Set @startMinute = '30 June 2011'
 Declare @endMinute smalldatetime Set @endMinute = '1 July 2011';
 With minuteList(aMinute) As 
 (Select @startMinute Union All
    Select dateadd(minute,1, aMinute)
    From minuteList
    Where aMinute < @endMinute)
 Select aMinute, Count(T.[colName])
 From minuteList ml Left Join [tableName] T
      On DateAdd(minute, DateDiff(minute, 0, T.[colName]), 0) = aMinute
 Group By aMinute
 Option (MaxRecursion 10000);
Run Code Online (Sandbox Code Playgroud)