MySQL 5.5 - 在我的表日誌中,如何總結每個user_id的n個最近條目的值,對於所有user_ids?如何獲取子查詢組中最近的n個條目?
CREATE TABLE `logs` (
`id` INT NOT NULL ,
`user_id` INT NULL ,
`value` INT NULL ,
`date_created` DATETIME NULL ,
PRIMARY KEY (`id`));
MySQL 5.5 - 在我的表日誌中,如何總結每個user_id的n個最近條目的值,對於所有user_ids?如何獲取子查詢組中最近的n個條目?
CREATE TABLE `logs` (
`id` INT NOT NULL ,
`user_id` INT NULL ,
`value` INT NULL ,
`date_created` DATETIME NULL ,
PRIMARY KEY (`id`));
嘗試此查詢:
SELECT `user_id`, SUM(`value`)
FROM logs` as l
WHERE (SELECT COUNT(*)
FROM `logs`
WHERE `user_id` = l.`userid` AND `date_created` > l.`date_created`) < 3
GROUP BY `user_id`
請注意,我沒有測試它,因此它可能需要一些調整。
SELECT SUM(*) `TotalSum`
FROM `logs` log
INNER JOIN (SELECT MAX(`date_created`) createdDate, id FROM `logs` GROUP BY `user_id`) temp
ON temp.id=log.id
GROUP BY log.`user_id`;
謝謝aziz,這個作品!大桌上的加入影響表現如何「不好」? (注意會有比user_ids更多的日誌行) – thomers
我很高興它爲你工作。不幸的是,我沒有在大桌子上試過,所以很抱歉,我無法評論演出部分。我的假設是,如果'user_id'被索引,那麼它不應該是非常糟糕的。另外,我假設日誌會在關閉時間處理,這樣也會有所幫助。如果您碰巧在大表上運行此查詢,請分享關於性能的調查結果。謝謝。 –