Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL 5.7-如何通过查询获取最大值和分组的id?_Mysql_Date_Group By - Fatal编程技术网

MySQL 5.7-如何通过查询获取最大值和分组的id?

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

我在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 | 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未在组中按命名