1
我正在使用PostgreSQL 9.3和大約7M行的表。Postgresql時間片/窗口查詢
我想獲得每個device_group上的每個表的記錄數。
我想我的結果集看起來像這樣:
device_group.id | date | count
-------------------------------------
123 | 2013-11-28| 45
123 | 2013-11-29| 37
124 | 2013-11-28| 4
124 | 2013-11-29| 23
125 | 2013-11-28| 3
如果每個device_group具有可作爲結果集的記錄每天計數。
理想情況下,我可以傳遞開始日期和結束日期以確定結果集中每個device_group應該有多少個日期記錄。
我不介意結果集是否忽略計數爲零的記錄。
表的基本形式是這樣的:
CREATE TABLE session (
id SERIAL PRIMARY KEY,
acctstarttime TIMESTAMP,
deviceid INTEGER (FOREIGN KEY)
);
CREATE TABLE device_group (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE device (
id SERIAL PRIMARY KEY,
device_group_id INTEGER (FOREIGN KEY)
name TEXT
);
我和窗口功能的工作,而且我可以得到按日期細分全局的號碼,或者一些由device_group_id,但不合並...那就是我卡住的地方。
我一直使用至今:
SELECT
device_group_id,
COUNT(s.id)
OVER (PARTITION BY deviceid)
FROM session s
LEFT JOIN device d ON s.deviceid = d.id
WHERE acctstarttime > '2013-11-01' AND acctstarttime < '2013-11-28'
ORDER BY device_group_id;
和
SELECT
TO_TIMESTAMP(EXTRACT ('epoch' FROM acctstarttime)::int/(86400) * 86400) AS timeslice,
COUNT(username)
FROM session
WHERE acctstarttime > '2013-11-01' AND acctstarttime < '2013-11-28'
GROUP BY timeslice
ORDER BY timeslice ASC;
哇,我肯定是過度思考這一個。我已經測試過了,它給了我需要的結果。謝謝! – krunchyklown