【问题标题】:MySQL 5.7 - how to get id for a max value and group by query? [duplicate]MySQL 5.7 - 如何获取最大值的 id 并按查询分组? [复制]
【发布时间】:2017-03-22 14:45:16
【问题描述】:

我在 MySQL 5.7 上工作,我想获取每个类别的最后一篇文章的 ID 和 TITLE。例如我有下表“文章”:

| 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:我不想禁用 ONLY_FULL_GROUP_BY SQL 模式

【问题讨论】:

    标签: mysql date group-by


    【解决方案1】:

    即使您要禁用 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
    

    【讨论】:

      【解决方案2】:

      唯一的方法是重新加入表格,例如:

      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;
      

      【讨论】:

      • SELECT id, MAX(date) as date, fk_category FROM article GROUP BY fk_category 将在具有 ONLY_FULL_GROUP_BY SQL 模式的服务器上失败,因为 ID 未在 GROUP BY 中命名
      猜你喜欢
      • 2015-04-11
      • 1970-01-01
      • 2022-07-05
      • 1970-01-01
      • 2013-10-07
      • 2015-10-07
      • 2018-06-10
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多