繁体   English   中英

如何一起使用MYSQL Group By和Order By

[英]How to use use MYSQL Group By and Order By together

我必须从按一列分组并按另一列排序的表中获取数据。 通常,当您在表上执行GROUP BY时,它将检索该组中的第一行。 但是我的任务是获取该组中的最后一行。

我以WordPress帖子表为例。 考虑到我们需要从wp_posts表中获取数据,该表按post_type字段分组post_type ID降序排列。 在第一次尝试时,我运行了如下查询。

SELECT ID, post_type FROM wp_posts GROUP BY post_type ORDER BY ID DESC;

我认为这是正确的,但事实并非如此。 在下面的图片中查看我使用此查询收到的数据。

Id  | post_type................................................................................................
65  | attachment........................................................................................
2   | nav_menu_item.......................................................................................
187 | page ........................................................................................................
1897| post.......................................................................................................

我在几次Google搜索后尝试了此方法,该方法对某些人有用,但对我却不起作用

SELECT subtable.ID, subtable.post_type FROM 
(SELECT * FROM wp_posts ORDER BY ID DESC) AS subtable 
GROUP BY post_type

我想要的结果是

Id  | post_type.................................................................................................
1900| attachment..................................................................................
1672| nav_menu_item.................................................................................
1668| page...............................................................................................
1899| post..................................................................................................

我认为问题是在使用GROUP BY时,临时表通过排序恢复了顺序。

您应该使用:

SELECT *
FROM messages m1
WHERE message_id = (SELECT message_id
                     FROM messages m2
                     WHERE m1.user_id = m2.user_id
                     ORDER BY created_at DESC
                     LIMIT 1);

或者,如果您拥有MySQL 8.0简单的ROW_NUMBER

SELECT *
FROM (SELECT *
            ,ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY created_at DESC) rn
      FROM messages) sub
WHERE sub.rn = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM