首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何按日期、会话线程将数据库中的所有会话分组

如何按日期、会话线程将数据库中的所有会话分组
EN

Stack Overflow用户
提问于 2014-05-29 18:19:16
回答 2查看 157关注 0票数 2

我有一个sqllite数据库,它有一个接收和发送消息的日志。

代码语言:javascript
复制
id    sender   to   msg                    timestamp
1     2        9    1-1                    201
2     9        2    1-2                    202
3     1        9    2-1                    203
4     9        2    1-3                    204
5     9        1    2-2                    205

我可以按时间戳对它们进行排序,但是当对话重叠时,如上面的例子(在9、2和1之间),就会降低可读性。

我怎样才能让他们在谈话中看到?

ie:

代码语言:javascript
复制
id    sender   to   msg                    timestamp
1     2        9    1-1                    201
2     9        2    1-2                    202
4     9        2    1-3                    204
3     1        9    2-1                    203
5     9        1    2-2                    205

在我的数据库中,所有会话都在9到另一个数字之间,因此,例如,2和1永远不会有对话。

我已经把数据输入到SQLFiddle在这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-29 18:27:19

要按照会话开始的顺序获取会话,您需要自加入表以获得每个会话的最小时间戳,然后只需按最小id进行排序,就可以得到会话的顺序,其次是消息的时间戳,以使消息有序。

代码语言:javascript
复制
SELECT a.id, a.sender, a."to", a.msg, a.timestamp
FROM table1 a
JOIN table1 b
  ON CASE WHEN a.sender=9 THEN a."to" ELSE a.sender END =
     CASE WHEN b.sender=9 THEN b."to" ELSE b.sender END 
GROUP BY a.id, a.sender, a."to", a.msg, a.timestamp
ORDER BY MIN(b.timestamp), a.timestamp

一个要测试的SQLfiddle

票数 3
EN

Stack Overflow用户

发布于 2014-05-29 19:30:43

如果我正确理解了您的问题,这个查询应该按照您的需要进行排序:

代码语言:javascript
复制
select * from 'mytable'
  ORDER by timestamp asc,
  CASE WHEN "sender"="101"
  THEN "to"
  ELSE "sender" END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23940223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档