我在紅移數據庫中有一組記錄,每個記錄都有一個指示活動開始的時間戳和一個指示活動結束的時間戳。每分鐘計數重複次數作爲列存儲
timestamp_start |timestamp_end
2017-01-01 01:01:31 |2017-01-01 01:48:31
2017-01-01 01:02:35 |2017-01-01 02:08:35
2017-01-01 01:09:10 |2017-01-01 02:18:10
2017-01-01 01:10:05 |2017-01-01 02:00:05
2017-01-01 01:14:58 |2017-01-01 01:56:58
2017-01-01 01:19:10 |2017-01-01 02:18:10
2017-01-01 01:25:10 |2017-01-01 01:54:10
2017-01-01 01:30:23 |2017-01-01 01:56:23
2017-01-01 01:36:26 |2017-01-01 03:06:26
2017-01-01 01:37:03 |2017-01-01 02:14:03
2017-01-01 01:37:15 |2017-01-01 02:08:15
2017-01-01 01:37:55 |2017-01-01 02:58:55
2017-01-01 01:42:49 |2017-01-01 02:59:49
2017-01-01 01:44:10 |2017-01-01 03:23:10
2017-01-01 01:46:49 |2017-01-01 02:58:49
2017-01-01 01:49:34 |2017-01-01 02:15:34
2017-01-01 01:52:11 |2017-01-01 02:38:11
2017-01-01 01:52:45 |2017-01-01 03:31:45
2017-01-01 01:54:15 |2017-01-01 02:17:15
2017-01-01 01:55:14 |2017-01-01 02:40:14
它是一個簡單的方法用下面的計算每分鐘的新活動的發生:
select date_trunc('minute', timestamp_start) as minute, count(*) as count
from myTable
group by 1
同樣計數的活動結束:
select date_trunc('minute', timestamp_end) as minute, count(*) as count
from myTable
group by 1
然而,我如何計算每一分鐘內「正在進行」的活動[編輯:對於某個範圍內的每一分鐘]?即在分組01:01中我們有一個新的活動開始。在分鐘01:02我們又開始了一個新的活動,但從01:01 開始的活動尚未完成,因此當前活動的計數爲是兩個。相反,02:00的記錄數必須爲而非包括在該分鐘之前完成的4條記錄中的任何記錄。此外,解決方案還必須不「爆炸」數據,即將記錄加入到「已準備好」分鐘的不同表中,以提供記錄的多個副本,然後計算結果表的長度。
我已經嘗試以下操作:
SELECT
minute,
count(CASE WHEN timestamp_end > minute AND timestamp_start < minute) AS tmp
FROM (
SELECT minute
FROM (
(
SELECT date_trunc('minute', timestamp_start) AS minute
FROM myTable
GROUP BY 1
)
UNION ALL (
SELECT date_trunc('minute', timestamp_end) AS minute
FROM myTable
GROUP BY 1
)
) s1
GROUP BY 1)
但是我懷疑,我已經形成嚴重的情況下參數,可以很好地missusing它。然而,我也查看了窗口函數,但是我不能看到一個明顯的方法來計數,只包含「當前活動」記錄。
不幸的是,您當前的查詢既有邏輯問題也有語法問題;所以你可能不得不回到繪圖板。第一個問題:您想如何確定輸出中包含哪些分鐘?每一分鐘在一定範圍內?每分鐘都有一個非零計數?其他...? –
您能否根據您提供的樣本輸出向您的問題添加預期結果?您的描述非常詳盡,但恐怕還有一些誤解空間 –
@MarkAdelsberger在某個範圍內的每一分鐘,將更新 – DaveRGP