为了使事情变得非常简单,请说我有一个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)
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)
| 归档时间: |
|
| 查看次数: |
11026 次 |
| 最近记录: |