группировка нескольких полей с использованием sql - PullRequest
0 голосов
/ 12 ноября 2011

После некоторых соединений и прочего у меня есть таблица в следующем формате

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             

и набор результатов должен бытьотсортировано по времени, я немного запутался, как добиться этого с помощью группы по

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

если ваш db оракул, вы можете попробовать. После 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
2 голосов
/ 13 ноября 2011
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 имеют одинаковые time (если time функционально зависит от session_id). Если это не так, и вы используете time, вы не получите согласованных результатов в этом столбце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...