我试图将一个列添加到SQL表中。 该表包含对象发布人员。该对象不是唯一的,但时间戳是。 我想为每个对象添加一列,其中包含每行也发布该对象的人员的姓名。
+-------+-------+--------+
| ID | name | timeXX |
+-------+-------+--------+
| ID001 | name1 | timeXX |
| ID001 | name2 | timeXY |
| ID001 | name1 | timeYX |
| ID002 | name2 | timeZX |
| ID002 | name1 | timeYZ |
| ID002 | name3 | timeXZ |
| ID002 | name1 | timeZZ |
+-------+-------+--------+
我想最终得到像
这样的东西+-------+-------+--------+---------------+
| ID | name | time | grouped_name |
+-------+-------+--------+---------------+
| ID001 | name1 | timeXX | name2 |
| ID001 | name2 | timeXY | name1 |
| ID001 | name1 | timeYX | name2 |
| ID002 | name2 | timeZX | name1, name3 |
| ID002 | name1 | timeYZ | name2, name3 |
| ID002 | name3 | timeXZ | name1, name2 |
| ID002 | name1 | timeZZ | name2, name3 |
+-------+-------+--------+---------------+
这是可能的吗?如果是这样,怎么样?我很想知道!
感谢您的帮助,问候,
路德
答案 0 :(得分:0)
试试这个:
select t.id,t.name,t.time,(
select group_concat(DISTINCT t2.name separator ',')
from times t2 where t2.id=t.id AND (t.time like concat('%',substring(REPLACE (t2.time,'time', ''),1,1),'%')
OR t.time like concat('%',substring(REPLACE (t2.time,'time', ''),2,1),'%')) AND t2.name<>t.name
group by t2.id
) as time_group from times t
答案 1 :(得分:0)
感谢您的回应和反馈。它对我帮助很大。
目前我在以下解决方案中找到了答案。不完全是我想要的结果,但我可以用。
SELECT * ,GROUP_CONCAT(DISTINCT `name`) AS `grouped_name` FROM table GROUP BY `time`
为了获得最佳效果,我想从grouped_name
中减去grouped_name
添加到的行的名称。
但是现在这个效果还不错。我想我最初的问题是不够清楚,因为我将我的问题翻译成英文并做了我没有完全进入(mySQL)的东西。
非常感谢!
此致
路德