[英]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.