2
我想收集MySQL-Table上的每週靜態數據。MySQL:使用子狀態(子查詢)彙總每週統計信息
表本身的結構如下:
user_id action_id created
0 123 2017-01-01 00.00:00
0 124 ...
1 123 ...
... ... ...
我想聚集每週靜爲:
有多少用戶,其中活躍每週
這很簡單:
SELECT YEARWEEK(created) as week, COUNT(DISTINCT user_id) AS count FROM data GROUP BY YEARWEEK(created);
此外,我可以應用排序。
結果是這樣的:
week count 201701 2 201702 3
有多少用戶,其中活躍每週的第一次 我想過使用子查詢解決它
SELECT YEARWEEK(created) as week, COUNT(DISTINCT user_id) AS count, ( SELECT COUNT(DISTINCT d2.user_id) FROM data d2 WHERE YEARWEEK(d2.created) = week AND NOT EXISTS (SELECT 1 FROM data d3 WHERE YEARWEEK(d3.created) < week AND d2.user_id = d3.user_id) ) as countNewUsers FROM data d1 GROUP BY YEARWEEK(created);
- 如何很多初級用戶其中每週活躍 初級用戶爲ac略去1之間 相關一週以上的一個類似之前的10倍,但與其他子查詢
- 多少電力用戶其中活躍每週 高級用戶活躍10倍以上 相關星期前
這可以按預期工作,但性能相當差,因爲子查詢是在分組發生之前進行評估的。數百萬行在表中,這需要很長的時間。
有沒有人有這個查詢更好的解決方案,理想情況下返回單個結果集中的所有值?
沒有初級用戶和超級用戶的定義,不可能提供幫助。 –
嘗試使用CTE而不是使用子查詢...只是意見 –
Justed澄清了初級和高級用戶的定義。抱歉! – bumblebee