我正在嘗試構建一個查詢,它可以計算一小時內有多少條記錄。Microsoft SQL Server 2012-按小時計算記錄的開始和結束時間戳
我的平板電腦有以下欄目:
SessionID, Created, SessionStart, SessionEnd
會話時間戳包含日期和時間。例如:2012-09-07 05:11:08.150
查詢的目標是返回例如一個名爲hour的列和一個名爲total的列,其中total將是小時內的記錄總和並結束。
我不知道這是否可行。
謝謝!
我正在嘗試構建一個查詢,它可以計算一小時內有多少條記錄。Microsoft SQL Server 2012-按小時計算記錄的開始和結束時間戳
我的平板電腦有以下欄目:
SessionID, Created, SessionStart, SessionEnd
會話時間戳包含日期和時間。例如:2012-09-07 05:11:08.150
查詢的目標是返回例如一個名爲hour的列和一個名爲total的列,其中total將是小時內的記錄總和並結束。
我不知道這是否可行。
謝謝!
這個查詢將返回彙總了您對數據的每個小時開始時是活動的每一個環節:
-- 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
謝謝!這有助於我理解邏輯 – user3324389
請考慮對答案進行投票並選擇它作爲解決不可避免的低調反對票的答案。謝謝:) –
哦,你很歡迎!我一直樂於幫助那些剛剛起步的人。我認爲這東西很有趣:) –
是的,這是可能的。讓我們知道你什麼時候卡住了。 – Kermit
我實際上陷入了困境......我正在學習SQL。 – user3324389
您必須通過實際編寫SQL來做最小的努力。或者至少,如果有人感到傾向,如果您實際提供了一些樣本數據和期望的結果集,他們可以幫助您。 – Kermit