mySQL - 如何选择两个不同的最小值?

时间:2017-02-09 14:07:28

标签: mysql

我有一个数据库,我有两个发件人之间通信的数据。 会话按会话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

第二次尝试不会显示这两个..

2 个答案:

答案 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开头的发件人排序。