2012-08-23 110 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