我试图从group_concat的结果中获取最大值。
以下是示例数据,以及我尝试过的内容,
+----+---------+--------------------------+
| id | user_id | comment |
+----+---------+--------------------------+
| 1 | 80 | I don't need it any more |
| 2 | 222 | Don't need this account |
| 3 | 80 | I have an other account |
| 4 | 80 | The other comment |
| 5 | 222 | some x |
+----+---------+--------------------------+
4 rows in set (0.01 sec)
我尝试了以下查询,
mysql> select max(group_concat(id SEPARATOR ' ')), user_id from userapp_accactivitylog;
但它给了我错误
ERROR 1111 (HY000): Invalid use of group function
使用group_concat(id)
我们会得到结果1,2,3,4,5
。我的要求是我想从group_concat得到的结果中选择最大数字。
我希望您了解我在寻找什么,如果有办法达到以下结果,请告诉我:
+----+---------+--------------------------+
| id | user_id | comment |
+----+---------+--------------------------+
| 5 | 222 | some x |
| 4 | 80 | The other comment |
+----+---------+--------------------------+
2 rows in set (0.01 sec)
我正在尝试按user_id分组,我想在id列中获取最大数量的记录(在本例中为5)。
答案 0 :(得分:2)
这应该得到你想要的东西:
select
user_id,
max(id) as id,
substring_index(group_concat(comment order by id desc SEPARATOR '|'), '|', 1)
from
userapp_accactivitylog
group by user_id;
答案 1 :(得分:1)
这是greatest-n-per-group问题的变体,经常被问到。
这是一个解决方案:
SELECT u.*
FROM (
SELECT user_id, MAX(id) AS id
FROM userapp_accactivitylog
GROUP BY user_id) AS t
JOIN userapp_accactivitylog AS u USING (id)