我有一个sqllite数据库,它有一个接收和发送消息的日志。
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:
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在这里
发布于 2014-05-29 18:27:19
要按照会话开始的顺序获取会话,您需要自加入表以获得每个会话的最小时间戳,然后只需按最小id进行排序,就可以得到会话的顺序,其次是消息的时间戳,以使消息有序。
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。
发布于 2014-05-29 19:30:43
如果我正确理解了您的问题,这个查询应该按照您的需要进行排序:
select * from 'mytable'
ORDER by timestamp asc,
CASE WHEN "sender"="101"
THEN "to"
ELSE "sender" ENDhttps://stackoverflow.com/questions/23940223
复制相似问题