python - SQLite - 将行组合成新列
问题描述
我正在尝试使用我自己的文本消息在 Python 3.9 中创建一个聊天机器人,但无法正确格式化我的数据。
我有一个如下所示的短信表:
row_id | 类型 | 日期 | 文本 |
---|---|---|---|
1 | 进货 | 2020-08-10 08:09:18 | 你好 |
2 | 传出 | 2020-08-10 08:11:04 | 你好 |
3 | 进货 | 2020-08-10 08:11:12 | 为了明天 |
4 | 进货 | 2020-08-10 08:11:20 | 我们还在吃饭吗? |
5 | 传出 | 2020-08-10 08:11:31 | 让我检查一下。 |
6 | 传出 | 2020-08-10 08:11:43 | 是的 |
7 | 进货 | 2020-08-10 08:11:45 | 伟大的! |
我需要做的是将最后一个和下一个传出之间的所有传入文本以及最后一个和下一个传入之间的所有传出文本合并到一个列中。
例如,上表应如下所示:
进货 | 传出 |
---|---|
你好 | 你好 |
明天我们还在吃晚饭吗? | 让我检查一下。是的 |
伟大的 |
对话有超过 17,000 条记录。我使用 sqlite3 在 Python 3.9 中运行它。
我将如何完成这项任务?
解决方案
您可以使用分析函数和条件聚合,如下所示:
Select group_concat(case when type = 'incoming' then text end, ' ') as incoming_msg,
Group_concat(case when type = 'outgoing' then text end, ' ') as outgoing_msg
From
(Select t.*,
Sum(case when type = lg_type then 0 else 1 end) over (order by date) as sm
From
(Select t.*,
Lag(type) over (order by date) as lg_type
From t) t) t
Group by sm
推荐阅读
- php - 通过连接和标题('Content-Type:audio/mpeg')使用php合并mp3音频是否正确?
- visual-studio-code - 在 VS Code 中,有没有办法在用右括号 (}) 关闭代码块时自动添加结束注释?
- android - Android - 如何创建一个包含许多布局的 ScrollView?
- java - 在二维数组的所需位置插入列
- c# - 如何打包 PowerShell 二进制 Cmdlet 以从 Azure DevOps 库安装
- sql - athena presto - 从长到宽的多列
- prisma-graphql - 在 Prisma 2 中检索已删除模型的相关模型
- java - 使用其中一个面板内的按钮在面板之间切换
- python - 使用异步的进程间通信?
- reactjs - 更改底部选项卡 React Native 的颜色