0

我得到了一个包含日期时间类型字段的数据表,我每分钟得到 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 分钟获取一条记录

任何人都可以帮我吗 我该怎么做

谢谢

4

3 回答 3

4

我不确定我是否完全理解您的要求,但是对于分钟为 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

于 2012-08-23T17:26:40.417 回答
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 --
)

然后像下面这样的查询(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排序。dateLoggedperiodID

这就是它的全部内容。真的很简单,一旦你分解它。

于 2012-08-23T19:21:18.793 回答
0

问题是你有 2 个 periodid 218 行,平均周期 218 怎么样?

于 2013-05-11T15:47:06.243 回答