2011-10-03 539 views
0

我正在运行查询来分析Group_member_ID中某些用户的变体。 我想确定的是group_member_ids中的关键变体(例如2011年1月8日的Group1,2011年5月8日的Group5)。SQL:消除GROUP_CONCAT中重复的链条

我想出了这个命令:

select id, 
CAST(group_concat(concat('[',group_member_id,'-',from_unixtime(obs_time),']') order by obs_time) as CHAR(10000) CHARACTER SET utf8) 
from Table1 
where id=1 

结果:

IMEI组/日期

1[178-2011-06-13 18:58:31],[0-2011-06-13 19:20:56],[0-2011-06-17 17:21:57],[0-2011-06-19 16:53:29],[0-2011-06-22 16:41:11],[178-2011-09-30 16:43:11],[179-2011-10-01 18:43:11] 

我怎样才能消除集团/日期[0-2011-06-17 17:21:57],[0-2011-06-19 16:53:29],[0-2011-06-22 16:41:11]从这个查询,因为我已经确定了group_member_id = 0的第一条记录和其他记录不事对我来说... 换句话说,我希望我的最终结果是这样的:

IMEI组/日期

1[178-2011-06-13 18:58:31],[0-2011-06-13 19:20:56],[178-2011-09-30 16:43:11],[179-2011-10-01 18:43:11] 

我卡住了。我正在考虑在我的group_concat中使用LIMIT,但显然这是不可能的。或者是?

感谢您的回答。

+0

的子查询解决方案最适合您的需求,但是你没有给你的数据库的一个清晰的布局,所以我不能拿出你一个具体的SQL。 – vbence

+0

有4个数据在前缀'[0-2011-06-13 19:20:56],[0-2011-06-17 17:21:57],[0-2011-06-19 16: 53:29],[0-2011-06-22 16:41:11]'。在你想删除的基础上只有3个(就像你在你的问题中提到的那样) – diEcho

+0

是的,我认为是这样的...... 好吧,没必要给出一个清晰的布局,因为我只是从1个表中选择一个。 有4个数据0,我想只保留第一个,因为它会产生group_member_id变化(例如从178到0)。 低声说,最终结果应该是: 1 [178-2011-06-13 18:58:31],[178-2011-09-30 16:43:11],[179-2011-10-01 18 :43:11] – Rgonomike

回答

0

尝试用GROUP BY

SELECT id, CAST(GROUP_CONCAT ( 
           CONCAT('[',group_member_id,'-',from_unixtime(obs_time),']') 
           ORDER BY obs_time) as CHAR(10000) CHARACTER SET utf8) 
          AS group_set 
    FROM table1 
    WHERE id=1 
    GROUP BY group_member_id 
+0

由于obs_time永远不会相同,所以DISTINCT不会起作用。即使我从我的concat中排除obs_time,DISTINCT也只会返回一次group_member_id 178。 – Rgonomike

+0

然后按照步骤执行查询 – diEcho

+0

是的,我会这样做的一次发生,但我显然有更多的行来分析。这只是一个例子。 – Rgonomike