簡體   English   中英

如何連接 SQL 中亂序的字符串碎片消息

[英]How do I concatenate fragmented messages of strings that are out of order in SQL

我有一個包含三列的表,第一列表示消息 ID(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      |
+------------+-----------------------------------+

在 Postgres 中,您可以為此使用string_agg()

select message_Id, string_agg(message, ' ' order by message_order)  as message
from the_table
group by message_id;

對於 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;

對於 Hive:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM