将行与group_by组合/合并在一起+在下一行的列上有条件

问题描述 投票:0回答:3

[我所获得的是电信公司与新客户进行的聊天。在聊天中,客户和公司代表进行了聊天。

我正在尝试折叠聊天室,以减少行数。下图显示了之前数据的外观以及之后数据的外观。

之前

Dataset right now

之后

What I would like to see

我看过以下文章:

我已经尝试过此代码:

select 
    unique_id, string_agg(concat(text, ' ', text), ', ')
from 
    conversation
group by 
    unique_id, user

但是,这不会在必要时将其折叠。它将其完全折叠为2x条线,一条用于客户,另一条用于公司。我要查找的逻辑是,如果此查询的下一行包含相同的unique_id,则用户然后将当前行文本字段与下一行文本字段连接起来。

这里是SQL Fiddle页面,但是我正在具有string_agghttp://sqlfiddle.com/#!9/5ad86c/3]的SQL Server中运行此代码>

如果您查看我的StackOverflow历史记录,我已经在R中请求了几乎类似的算法。

CREATE TABLE conversation
(
     `unique_id` double, 
     `line_no` int, 
     `user` varchar(7000), 
     `text` varchar(7000)
);

INSERT INTO conversation (`unique_id`, `line_no`, `user`, `text`)
VALUES
    (50314585222, 1, 'customer', 'Hi I would like to sign up for a service'),
    (50314585222, 2, 'company', 'Hi My name is Alex. We can offer the following plans. We also have signup bonuses, with doubling of data for 12 months '),
    (50314585222, 3, 'company', 'Plan1: 40GB data, with monthly price of $80'),
    (50314585222, 4, 'company', 'Plan2: 20GB data, with monthly price of $40'),
    (50314585222, 5, 'company', 'Plan3: 5GB data, with monthly price of $15'),
    (50314585222, 6, 'customer', 'I was hoping for a much smaller plan, with only voice service'),
    (50314585222, 7, 'customer', 'maybe the $10 per month plan.'),
    (50319875222, 4, 'customer', 'so how do I sign up'),
    (50319875222, 5, 'customer', '*for the service'),
    (50319875222, 7, 'company', 'maybe I can call you for your details?')
;

[我所获得的是电信公司与新客户进行的聊天。在聊天中,客户和公司代表进行了聊天。我正在尝试折叠聊天,以减少行数。 ...

sql sql-server tsql relational-database gaps-and-islands
3个回答
0
投票

如果我对您的理解正确,那么下一种方法是可行的解决方案。您需要找到更改并定义适当的组:


0
投票

这是一个空白问题,您想由同一位发言人将相邻的行分组在一起。


0
投票

这是一个空白问题,您想由同一位发言人将相邻的行分组在一起。

© www.soinside.com 2019 - 2024. All rights reserved.