我得到了一个包含日期时间类型字段的数据表,我每分钟得到 3-5 个条目的数据,即,
23/08/2012 18:05:01,
23/08/2012 18:05:15,
23/08/2012 18:05:26,
23/08/2012 18:05:44,
23/08/2012 18:05:59
现在我需要每 5 分钟获取一条记录
任何人都可以帮我吗 我该怎么做
谢谢
我得到了一个包含日期时间类型字段的数据表,我每分钟得到 3-5 个条目的数据,即,
23/08/2012 18:05:01,
23/08/2012 18:05:15,
23/08/2012 18:05:26,
23/08/2012 18:05:44,
23/08/2012 18:05:59
现在我需要每 5 分钟获取一条记录
任何人都可以帮我吗 我该怎么做
谢谢
我不确定我是否完全理解您的要求,但是对于分钟为 5 的倍数的任何值,以下内容将返回一条记录:
select *
from
(
select *,
datepart(minute, yourDate) mn,
row_number() over(partition by datepart(minute, yourDate) order by yourDate) rn
from yourTable
) x
where (mn % 5) = 0
and rn = 1
给定一个看起来像这样的表:
create table some_event_log_table
(
id int not null identity(1,1) primary key clustered ,
dateTimeLogged datetime not null ,
... some more columns here --
)
然后像下面这样的查询(http://sqlfiddle.com/#!3/5ad56/1/0上的SqlFiddle )应该可以解决问题:
select dateLogged = convert(date,dateTimeLogged),
periodID = datediff(minute,
convert(date,dateTimeLogged) ,
dateTimeLogged
) / 5 ,
period_start = convert(time,
dateadd(minute,
datediff(minute,
convert(date,dateTimeLogged),
dateTimeLogged
) ,
convert(datetime,convert(date,dateTimeLogged))
)
) ,
events_logged = count(*)
from some_event_log_table
group by convert(date,dateTimeLogged),
datediff(minute,
convert(date,dateTimeLogged) ,
dateTimeLogged
) / 5 ,
convert(time,
dateadd(minute,
datediff(minute,
convert(date,dateTimeLogged),
dateTimeLogged
) ,
convert(datetime,convert(date,dateTimeLogged))
)
)
我们9在这里做的是以下。
首先,我们将一天划分为每个 5 分钟的时段。每天有 288 个这样的 5 分钟时段。
然后,对于表中的每一行,我们
计算列dateLogged
,行的报告日期(无时间)。
计算 column periodID
,一个从 0 到 287 的值,指示该行属于每天 288 个 5 分钟周期中的哪一个。
计算 column periodStart
,该行所在时段的开始时间。
最后,我们
group by
,为一天内的每个时间段创建 1 个组,对我们刚刚为每一行计算的 3 个值进行分组。order by
排序。dateLogged
periodID
这就是它的全部内容。真的很简单,一旦你分解它。
问题是你有 2 个 periodid 218 行,平均周期 218 怎么样?