MySQL 5.7-如何通过查询获取最大值和分组的id?
我在MySQL 5.7上工作,我想获得每个类别最后一篇文章的ID和标题。例如,我有下表“Article”:MySQL 5.7-如何通过查询获取最大值和分组的id?,mysql,date,group-by,Mysql,Date,Group By,我在MySQL 5.7上工作,我想获得每个类别最后一篇文章的ID和标题。例如,我有下表“Article”: | 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 | 201
| 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 |
我尝试过此请求,但不起作用:
SELECT id, title, MAX(date), fk_category
FROM article
GROUP BY fk_category
ORDER BY date DESC
我必须使用什么查询
PS:我不想通过SQL模式仅禁用\u FULL\u GROUP\u唯一的方法是重新加入表,类似于:
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;
即使您要禁用MySQL的
ONLY\u FULL\u GROUP\u 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
选择id,MAX(date)作为日期,按fk_类别从文章组中选择fk_类别
将在只有SQL模式的服务器上失败,因为id未在组中按命名