Как объединить фрагментированные сообщения строк, которые не в порядке в SQL - PullRequest
1 голос
/ 08 ноября 2019

У меня есть таблица с тремя столбцами, в первом столбце указан идентификатор сообщения (message_id), во втором столбце - порядковый номер, который указывает порядок сообщения (message_order), наконец, третий столбец - это фрагмент сообщения (message_fragment). ):

+------------+---------------+------------------------------+
| message_id | message_order |           message            |
+------------+---------------+------------------------------+
| Message 1  |             2 | Best, Jose                   |
| Message 1  |             1 | Thanks for your advice       |
| Message 2  |             1 | I only have one line of text |
+------------+---------------+------------------------------+

Есть ли в SQL способ объединить строки сообщений по сообщениям в порядке их следования? В конечном итоге получить следующее:

+------------+-----------------------------------+
| message_id |              message              |
+------------+-----------------------------------+
| Message 1  | Thanks for your advice Best, Jose |
| Message 2  | I only have one line of text      |
+------------+-----------------------------------+

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

для улья:

select message_id, concat_ws(' ', collect_list(message)) as message
  from
      (select message_id, message_order, message 
         from table
       distribute by message_id sort by message_order 
      )s  
 group by message_id
 order by message_id;
0 голосов
/ 08 ноября 2019

Для Oracle:

with msg(msg_id, msg_order, msg_text) as (
  select 1, 2, 'Best, Jose' from dual union all
  select 1, 1, 'Thanks for your advice' from dual union all
  select 2, 1, 'I only have one line of text' from dual
)
select msg_id, listagg(msg_text, ' ') within group (order by msg_id, msg_order) message
from msg
group by msg_id;
...