2012-08-23 82 views
0

我有一个数据表的类型日期时间的字段获取数据和我有数据,如3-5项为每分钟即SQL查询与时间间隔

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分钟

数据的一个记录任何一个可以请帮助我,我怎么可以这样做一个

感谢

+1

每5分组中的任何特定记录?第一?持续?随机? –

+0

三件事情:(1)你到目前为止尝试过什么? (2)对于可以被5整除的每分钟,选择一条记录? (3)由于每分钟会有一个以上的记录,您如何知道选择哪一个? – LittleBobbyTables

+0

不是每一个在5我需要得到记录与用户定义的时间间隔说5分钟那样 – Srikanth

回答

4

我不知道如果我完全理解你的要求,但下面的意志 - [R E打开一个记录,其中分钟为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 

SQL Fiddle with Demo

0

由于看起来像这样的表:

create table some_event_log_table 
(
    id    int  not null identity(1,1) primary key clustered , 
    dateTimeLogged datetime not null , 
    ... some more columns here -- 
) 

然后查询类似下面的(SqlFiddle在http://sqlfiddle.com/#!3/5ad56/1/0)应该这样做:

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)) 
      ) 
      ) 

我们在这里做的是以下内容。

  • 首先,我们把一天分成的每次5分钟时间。每天有288个这样的5分钟时间。

  • 然后,在该表的每一行,我们

    • 计算列dateLogged,申报日期(SANS时间)的行。

    • 计算列periodID,值为0-287,指示该行每天在288个5分钟期间中的哪一个落入。

    • 计算行所在时段的开始时间periodStart列。

  • 最后,我们

    • group by总结一下,在一天内的每个周期生成1组,对我们只是计算每行的3个值进行分组。
    • 在列dateLoggedperiodID上命令结果集为order by

这是对所有有它。真的很简单,一旦你分解。

0

问题在于你有2个periodid 218行,218期的平均值如何?

+0

我知道你不能评论,但这应该是一个评论:-) – GHC