将它们组合

问题描述:

减少的结果我有一个通过几个生成以下信息的表没有唯一的ID显示其他表的连接:将它们组合

id | username | blocked | online 
2 | The_Boss | 0 | 0 
2 | The_Boss | 0 | 0 
3 | The_Dude | 1 | 1 
3 | The_Dude | 0 | 0 

,我想给下面的结果:

id | username | blocked | online 
2 | The_Boss | 0 | 0 
3 | The_Dude | 1 | 1 

id是一个与用户名匹配的用户标识。基本上,我需要做的是生成一个在线/离线用户列表,前提是用户具有多个不同的在线记录,具体取决于他所在网页的不同部分。无论如何,如果用户在任何部分在线,我希望online=1优先于offline = 0,但每个用户标识应该变得唯一。因此,在一个更大的规模,将是这样的:

id | username | blocked | online 
2 | The_Boss | 0 | 0 
2 | The_Boss | 0 | 0 
2 | The_Boss | 0 | 0 
3 | The_Dude | 1 | 1 
3 | The_Dude | 0 | 0 
3 | The_Dude | 1 | 1 
4 | The_Kind | 0 | 0 
4 | The_Kind | 0 | 0 
4 | The_Kind | 0 | 0 
4 | The_Kind | 0 | 0 
5 | The_Mann | 0 | 0 
5 | The_Mann | 0 | 1 

返回:

id | username | blocked | online 
2 | The_Boss | 0 | 0 
3 | The_Dude | 1 | 1 
4 | The_Kind | 0 | 0 
5 | The_Mann | 0 | 1 

你可以组的结果通过用户ID和姓名,并采取最高状态:

SELECT id, username, MAX(blocked), MAX(online) 
FROM  mytable 
GROUP BY id, username 

似乎你需要不同的值

SELECT distinct username, blocked, online 
from your_table 
order by username, blocked desc, online