我试图编写一个在组concat中返回固定数量结果的查询。我不认为群组连续可能,但我无法弄清楚要添加哪种子查询。
这是我想做的事情:
select id,
group_concat(concat(user,'-',time) order by time limit 5)
from table
where id in(1,2,3,4)
group by 1
当我删除"限制5"从小组concat,查询工作,但吐出太多的信息。
我打开以不同方式构建查询。查询的用户将提供特定的ID号,并且对于指定的每个ID,我想列出固定数量的结果。如果有更好的方法可以让我知道。
答案 0 :(得分:0)
不确定您想要的确切结果集,但请查看此SO帖子: How to hack MySQL GROUP_CONCAT to fetch a limited number of rows?
作为另一个例子,我尝试了链接中提供的查询/解决方案并提出了这个:
SELECT user_id, SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT date_of_entry),',',5) AS logged_dates FROM log GROUP BY user_id;
返回:
user_id | logged_dates
1 | "2014-09-29,2014-10-18,2014-10-05,2014-10-12,2014-10-19"
2 | "2014-09-12,2014-09-03,2014-09-23,2014-09-22,2014-10-13"
3 | "2014-09-10"
6 | "2014-09-29,2014-09-27,2014-09-26,2014-09-25"
8 | "2014-09-26,2014-09-30,2014-09-27"
9 | "2014-09-28"
13 | "2014-09-29"
22 | "2014-10-12"
上述查询将返回已记录内容的每个用户ID,以及用户已记录的最多5个日期。如果您想从组concat中获得更多或更少的结果,只需更改查询中的数字5即可。
跟进,并将我的查询与你的查询合并,我得到:
SELECT user_id, SUBSTRING_INDEX(GROUP_CONCAT(date_of_entry ORDER BY date_of_entry ASC),',',3) AS logged_dates FROM log WHERE user_id IN(1,2,3,4) GROUP BY user_id
哪个会返回(注意我更改了group_concat返回的结果数):
user_id | logged_dates
1 | "2014-09-16,2014-09-17,2014-09-18"
2 | "2014-09-02,2014-09-03,2014-09-04"
3 | "2014-09-10"