2015-02-09 55 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