2014-03-24 95 views
-3

我正在嘗試構建一個查詢,它可以計算一小時內有多少條記錄。Microsoft SQL Server 2012-按小時計算記錄的開始和結束時間戳

我的平板電腦有以下欄目:

SessionID, Created, SessionStart, SessionEnd 

會話時間戳包含日期和時間。例如:2012-09-07 05:11:08.150

查詢的目標是返回例如一個名爲hour的列和一個名爲total的列,其中total將是小時內的記錄總和並結束。

我不知道這是否可行。

謝謝!

+5

是的,這是可能的。讓我們知道你什麼時候卡住了。 – Kermit

+0

我實際上陷入了困境......我正在學習SQL。 – user3324389

+0

您必須通過實際編寫SQL來做最小的努力。或者至少,如果有人感到傾向,如果您實際提供了一些樣本數據和期望的結果集,他們可以幫助您。 – Kermit

回答

0

這個查詢將返回彙總了您對數據的每個小時開始時是活動的每一個環節:

-- load test data; Sessions starting from 9-5 lasting up to 3 hours 
declare @YourTable table 
    (
    SessionID int identity(1,1), 
    SessionStart datetime, 
    SessionEnd datetime 
    ) 
while (select count(*) from @YourTable) < 1000 
    begin 
     insert into @YourTable(SessionStart) 
      values(dateadd(minute,round(rand()*480,0),'2014-03-24 09:00')) 
    end 
update @YourTable 
    set SessionEnd = dateadd(minute,round(rand()*360,0),SessionStart) 

-- create hour table based on min/max SessionStart/End values 
declare @hour table(BoH datetime,EoH datetime) -- Begin of Hour, End of Hour 
insert into @hour(BoH) 
    select dateadd(hour,datediff(hour,0,min(SessionStart)),0) from @YourTable 
while (select max(BoH) from @hour) < (select max(SessionEnd) from @YourTable) 
    begin 
     insert into @hour(BoH) 
      select dateadd(hour,1,max(BoH)) from @hour 
    end 
update @hour 
    set EoH = dateadd(hour,1,BoH) 

-- return results for sessions active during each hour 
select 
    h.BoH [Hour], 
    count(t.SessionID) Total 
from @YourTable t 
    inner join @hour h 
     on t.SessionStart < h.EoH 
     and t.SessionEnd >= h.BoH 
group by 
    h.BoH 
+0

謝謝!這有助於我理解邏輯 – user3324389

+0

請考慮對答案進行投票並選擇它作爲解決不可避免的低調反對票的答案。謝謝:) –

+0

哦,你很歡迎!我一直樂於幫助那些剛剛起步的人。我認爲這東西很有趣:) –

相關問題