我有一个包含数据记录的表,每个记录都属于一个类别。假设我有以下表格:
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
正如你所看到的,每个类别只有一个记录(一个用于Cat 1,一个用于Cat 2),在Cat 1的记录中我有最新记录。
如何在MySQL查询中翻译?
答案 0 :(得分: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
为了获得更好的效果,请在列INDEX
Category, 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
答案 1 :(得分:3)
您可以使用WHERE
子句过滤数据:
select *
from yourtable t1
where (category, date) in (select category, max(date)
from yourtable t2
group by category)