2015-02-09 51 views
1

看看下面的表格:如何分組最後的`n`行?

id - member_id - day 

0  1   1 
1  1   1 
2  1   2 
3  2   2 
4  1   3 
5  2   3 
6  2   3 
7  1   3 
8  1   3 
9  2   3 

可以說我想要做的事,如:

SELECT `day`, 
    COUNT(`id`) AS `count` 
FROM `table` 
WHERE `member_id` = 1 
GROUP BY `day` 
ORDER BY `day` DESC 
LIMIT 5 

和我預想的一樣的結果:

day - count 
3  3 
2  1 
1  1 

注意如何計數天1被削減一半,因爲只有該成員的最近五行被分組。相反,我得到最後五組,按天排序。

如何僅將最近的n行與WHERE條件分組?

實際上,我想使用WHERE,LIMIT,然後只有GROUP。

+0

您從查詢中選擇一天。這是我所知道的。 – 2015-02-09 22:36:12

+0

我不完全明白,你知道'HAVING'子句嗎? – 2015-02-09 22:36:45

+0

@LuisSiquot我不明白'HAVING'如何爲給定的成員提供最近的'n'行。 – 2015-02-09 22:39:32

回答

3

我想你想使用子查詢與limit

SELECT `day`, COUNT(`id`) AS `count` 
FROM (SELECT t.* 
     FROM `table` t 
     WHERE `member_id` = 1 
     ORDER BY `day` DESC 
     LIMIT 5 
    ) t 
GROUP BY `day` 
ORDER BY `day` DESC; 
+0

我最初無法得到一個子查詢來工作,我意識到現在我可能沒有'WHERE'子句。 – 2015-02-09 22:42:57