2017-03-22 68 views
-1

我在MySQL 5.7上工作,我想获取每个类别的最后一篇文章的ID和TITLE。例如,我有如下表“文章”:MySQL 5.7 - 如何获得最大值的id和查询组?

| ID | TITLE | DATE  | FK_CATEGORY | 
| 1 | title 1 | 2016-10-05 |  1  | 
| 2 | title 2 | 2017-10-02 |  1  | 
| 3 | title 3 | 2015-10-10 |  2  | 
| 4 | title 4 | 2017-04-20 |  2  | 
| 5 | title 5 | 2017-04-12 |  3  | 

在这个例子中我希望得到的结果是:

| 2 | title 2 | 2017-10-02 |  1  | 
| 4 | title 4 | 2017-04-20 |  2  | 
| 5 | title 5 | 2017-04-12 |  3  | 

我已经tryed这个请求,但它不工作:

SELECT id, title, MAX(date), fk_category 
FROM article 
GROUP BY fk_category 
ORDER BY date DESC 

我必须使用什么查询?

PS:我不想禁用ONLY_FULL_GROUP_BY SQL模式

回答

2

即使你禁用MySQL的ONLY_FULL_GROUP_BY模式,您当前的查询将运行,它可能不会产生正确的结果。此外,您将无法将查询移植到大多数其他数据库。更好的方法是使用可以找到每个类别的最近日期的子查询。然后,将article加入此子查询以获取所需的结果集。

SELECT t1.* 
    FROM article t1 
    INNER JOIN 
    (
     SELECT FK_CATEGORY, MAX(DATE) AS MAX_DATE 
     FROM article 
     GROUP BY FK_CATEGORY 
    ) t2 
     ON t1.FK_CATEGORY = t2.FK_CATEGORY AND 
      t1.DATE  = t2.MAX_DATE 
    ORDER BY date DESC 
0

的唯一办法就是加入表背,像:

select a.id, a.date, a.title, a.fk_category 
from article a 
join 
(
SELECT id, MAX(date) as date, fk_category 
FROM article 
GROUP BY fk_category 
) x using (id, date, fk_category) 
ORDER BY a.date DESC; 
+0

'SELECT标识,MAX(日期)日期,fk_category 从第 GROUP BY fk_category'将与ONLY_FULL_GROUP_BY SQL模式服务器失败,因为ID不是GROUP BY内命名 –