我有一个数据库,我有两个发件人之间通信的数据。 会话按会话ID分组。 我想在每个会话中获得两个发件人名称,但我似乎找不到丢失会话的方法。
第一个发件人始终以' M'开头。 另一个发件人是来自Android设备的UUID。 (通常不会以大写字母开头,但不是必需的)
我的第一次尝试:
select max(sender) as 'first',
min(sender) as 'second'
group by session_id;
在这里,在某些情况下,uuid以数字开头,我得到第一个和第二个发送者的uuid。
select min(sender) as 'first',
min(sender) as 'second'
where 'first' <> 'second'
group by session_id;
在这里,我失去了相同的会议。
我该怎么做?
最小/最大尝试次数=
的示例数据'first' 'second' 'session'
M4 af568906754xxxxx s1
M4 af568906754xxxxx s2
M4 4da5c573191xxxxx ...
M5 c8e953386eaxxxxx
M5 c8e953386eaxxxxx
M7 1b92d18d823xxxxx
M7 1b92d18d823xxxxx
M7 ac5a231d476xxxxx
M7 ac5a231d476xxxxx
M7 c8e953386eaxxxxx
M7 3266772f89dxxxxx
M962f1a67a9xxxxx M962f1a67a9xxxxx (first should be M8)
M95a231d476xxxxx M95a231d476xxxxx (first should be M8)
M8 c16a848a775xxxxx
M8 c16a848a775xxxxx
M9 bd3c04eeaf0xxxxx
第二次尝试不会显示这两个..
答案 0 :(得分:1)
SELECT session_id,
MAX (CASE WHEN sender like 'M%'
THEN sender
END) as first,
MAX (CASE WHEN sender not like 'M%'
THEN sender
END) as second
FROM YourTable
GROUP BY session_id
答案 1 :(得分:0)
select session_id,
group_concat(distinct sender order by case when sender like 'M%' then 1 else 2 end)
from your_table
group by session_id
该查询返回每个会话的记录。对于每个会话,它输出一个发件人列表。该列表由以M
开头的发件人排序。