2011-10-11 100 views
1

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`)); 

回答

1

嘗試此查詢:

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` 

請注意,我沒有測試它,因此它可能需要一些調整。

+0

謝謝aziz,這個作品!大桌上的加入影響表現如何「不好」? (注意會有比user_ids更多的日誌行) – thomers

+0

我很高興它爲你工作。不幸的是,我沒有在大桌子上試過,所以很抱歉,我無法評論演出部分。我的假設是,如果'user_id'被索引,那麼它不應該是非常糟糕的。另外,我假設日誌會在關閉時間處理,這樣也會有所幫助。如果您碰巧在大表上運行此查詢,請分享關於性能的調查結果。謝謝。 –

-1
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`; 
+0

該查詢不起作用,'max(date_created)'和'id'不能保證來自同一行。所以這是行不通的,你不會選擇最新的行。 – Johan

+0

@johan:子查詢選項獲取max date_created,以便只有所有最新的條目纔會相加。 – Bryan

+0

createddate和id沒有任何關係,因此單獨使它不能工作,並且OP想要n個最近的條目,而不是所有條目where date_created = max(date_created)。 – Johan

相關問題