2013-02-22 116 views
2

我有一个包含数据记录的表,每个记录都属于一个类别。可以说我有,继表:MySQL |如何只选择每个类别的一个记录?

ID | Category | Title | Date 
-------------------------------------- 
1 | Cat 1 | Ttl 1 | 2013-02-18 
2 | Cat 2 | Ttl 2 | 2013-02-18 
3 | Cat 1 | Ttl 3 | 2013-02-20 

我喜欢做的,是让唯一一家通过每个类别的文章,和一个我会必须是最新一个在表中。

更深入,结果必须看起来像这样:

ID | Category | Title | Date 
-------------------------------------- 
2 | Cat 2 | Ttl 2 | 2013-02-18 
3 | Cat 1 | Ttl 3 | 2013-02-20 

正如你可以看到我的每个分类均只有一条记录(一个用于1类,一个用于猫2)的记录中猫1我有最新的。

在MySQL查询中如何翻译?

回答

11
SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT Category, MAX(date) max_date 
      FROM tableName 
      GROUP BY Category 
     ) b ON a.category = b.category AND 
       a.date = b.max_date 

有更好的表现,上栏添加复方INDEXCategory, date

OR

SELECT a.* 
FROM tableName a 
     INNER JOIN 
     (
      SELECT Category, MAX(ID) max_ID 
      FROM tableName 
      GROUP BY Category 
     ) b ON a.category = b.category AND 
       a.ID = b.max_ID 
3

您可以使用WHERE子句来过滤数据:

select * 
from yourtable t1 
where (category, date) in (select category, max(date) 
          from yourtable t2 
          group by category) 

SQL Fiddle with Demo