SQL`GROUP BY`和`MAX()`

时间:2017-03-19 17:08:31

标签: mysql group-by subquery

Language    Date
----------------------
HTML        2017-03-15
HTML        2017-03-15
HTML        2017-03-19
JavaScript  2017-03-12
JavaScript  2017-03-17
PHP         2017-03-15
PHP         2017-03-17
PHP         2017-03-18
PHP         2017-03-18

我需要一个按language分组的结果,第二列是最新日期条目中每个语言行的COUNT()。并非所有语言都有相同日期的条目。

对于上表,结果应为:

HTML        1
JavaScript  1
PHP         2

1 个答案:

答案 0 :(得分:3)

这是一种方法:

select language, count(*)
from t
where t.date = (select max(t2.date)
                from t t2
                where t2.language = t.language
               )
group by language;

这使用相关子查询匹配每种语言的最新日期。还有其他方法,例如使用join或:

select language, count(*)
from t
where (t.language, t.date) in (select t2.language, max(t2.date)
                               from t t2
                               group by t2.language
                             )
group by language;