在做了一些连接和填充后,我有以下格式的表格
name session_id status time
abc 1 10
xyz 2 11
jack 2 10
zuck 1 10
paul 1 10
现在我想将我的结果分组为
session_id name+status time
1 abc:10, zuck:10, paul:10
2 xyz:11, jack:11
并且结果集按时间排序,我很困惑如何使用group by
来实现这一点答案 0 :(得分:4)
如果您的数据库是oracle,您可以尝试。在oracle 11g r2之后,你也可以使用listagg
select session_id, wm_concat(name_status), time from
(
select session_id, (name+':'+status) as name_status, time
from stuff
)
group by session_id
order by time
答案 1 :(得分:2)
SELECT
session_id
, GROUP_CONCAT( CONCAT(name, ':', COALESCE(status, -1)
SEPARATOR ', '
ORDER BY `time`
) AS name_status
, MIN(`time`) AS min_time --- or MAX(`time`)
FROM
TableX
GROUP BY
session_id
ORDER BY
min_time
如果所有具有相同time
的行具有相同的MIN(time)
(如果session_id
在功能上依赖于{{1},则可以使用time
代替time
}})。如果情况并非如此,并且您使用session_id
,则无法在该列上获得一致的结果。