我有一張帶時間戳的表格。什麼是適當的查詢來獲得最後一小時的每分鐘記錄計數。TS SQL - 按分組劃分
I.e.如果現在是2:25,我想知道1點25分到1點26分,1點26分和1點27分有多少記錄,所以我有60個結果。從表
我有一張帶時間戳的表格。什麼是適當的查詢來獲得最後一小時的每分鐘記錄計數。TS SQL - 按分組劃分
I.e.如果現在是2:25,我想知道1點25分到1點26分,1點26分和1點27分有多少記錄,所以我有60個結果。從表
這將在最後一小時
返回結果的數量爲每分鐘(這裏你有記錄)SELECT DATEPART(n, time_stamp) AS minute, COUNT(*) as results
FROM table_name
WHERE time_stamp > DATEADD(hh, -1, GETDATE())
GROUP BY DATEPART(n, time_stamp)
這可能會返回少於60個結果,具體取決於數據。如果必須有60個結果,則查詢稍有不同。這將使用公用表表達式生成60號的列表和相關子查詢來獲取爲每分鐘結果:
WITH numbers (num) AS (
SELECT 1 UNION ALL
SELECT 1 + num FROM numbers WHERE num < 60)
SELECT num AS minute,
(SELECT COUNT(*) AS results
FROM table_name
WHERE DATEPART(n, time_stamp) = num
AND time_stamp > DATEADD(hh, -1, GETDATE())
FROM numbers
要查看結果,替換DATEADD(HH,-1,GETDATE() )與DATEADD(mi,-15,GETDATE()),你會得到最後15分鐘的結果和其他分鐘的0。
SELECT COUNT(TS),其中間(開始時間,結束時間)TABLE.TS
謝謝,但這會給我總計數,或者我必須運行它60次。我需要一個查詢來給我每分鐘的總數。 – 2009-04-16 22:15:41
當你編輯的問題,我編輯我的答案。如果我對你有正確的理解,你只想看看過去的一小時 - 也就是從請求到當前時間的一小時前的時間。這是我該怎麼做:
SELECT
COUNT(yourTimeStamp)
FROM yourTable
WHERE DATEADD('hh', -1, GetDate()) <= yourTimeStamp
AND yourTimeStamp < GetDate()
GROUP BY DATEPART('mm', yourTimeStamp)
我不完全確定的語法是確切的。當在MSSQL
中編碼時,我會在當前時間使用CURRENT_TIMESTAMP
,MINUTE
而不是DATEPART
等,但是您會得到解決方案的想法。
+1爲答案。這不完全是我需要的,所以我會重新解釋這個問題。謝謝。 – 2009-04-16 22:20:01
另外,沒有HOUR和MINUTE,但是DATEPART。 – 2009-04-16 22:25:56
DATEPART是你在找什麼:
declare @times table
(
someTime datetime
)
INSERT INTO @Times (sometime) values ('jan 12 2008 12:23')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:34')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:35')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:25')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:02')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:09')
INSERT INTO @Times (sometime) values ('jan 12 2008 12:35')
select DATEPART(mi,sometime) AS Minute, count(*) AS NumOccurances
from @Times
WHERE SomeTime BETWEEN @Lower AND @Upper
GROUP BY DATEPART(mi, sometime)
order by NumOccurances DESC
結果:
Minute NumOccurances
35 2
2 1
9 1
23 1
25 1
34 1
這比Tomas的答案要好,因爲使用了Hour()或等價物,因爲當數據集有一天以上時,結果會產生誤導。請記住,這是包容性的,在這種情況下,通常情況下表達時間> =較低,有時<較高。 – rfusca 2009-04-16 22:32:19
我的觀點顯然是應該分開考慮的日期的所有部分都需要考慮在內。我剛剛寫了一個小時作爲例子,並認爲很明顯,還需要考慮日,月和年。 – 2009-04-16 22:54:44
這是我發現的一種替代方法,用於確定每分鐘插入或更新多少條記錄。預先將日期格式作爲變量的好處是,您可以輕鬆地將其更改爲每小時分析一次。希望這可以幫助!
DECLARE @dateFormat as varchar(max) = 'yyyy-MM-dd HH:mm'
SELECT format(timeColumn, @dateFormat) AS minute, COUNT(*) as results
FROM yourTable
WHERE timeColumn > DATEADD(hh, -1, GETDATE())
GROUP BY format(timeColumn, @dateFormat)
ORDER BY 1
看起來是正確的,謝謝。 – 2009-04-16 22:34:35
很高興幫助。你需要保證查詢每次返回60條記錄嗎? – 2009-04-16 22:37:30
不,不需要,謝謝 – 2009-04-16 22:46:53