我有一个表,属于一个人的手机短信叫"阿里"。他收到别人的短信,然后把他的短信回复给那些人。
MessageTable
看起来像这样:
按每个联系人的第一个时间戳先排序。
联系人。然后是日期& &;时间。
如果没有窗口函数,就像这样:
SELECT t.*
FROM messages t
JOIN (
SELECT
(CASE WHEN receiver = 'Ali' THEN sender ELSE receiver END) AS contact,
MIN(TIMESTAMP(sendDate, sendTime)) AS minTs
FROM messages
WHERE 'Ali' IN (sender, receiver)
GROUP BY (CASE WHEN receiver = 'Ali' THEN sender ELSE receiver END)
) q ON q.contact IN (t.sender, t.receiver)
WHERE 'Ali' IN (t.sender, t.receiver)
ORDER BY q.minTs, q.contact, t.sendDate, t.sendTime;
使用CASE语句创建计算列,如果接收方是Ali,则将其值设置为发送方,如果发送方是Ali,则将其值设置为接收方。
按此列和日期排序
我来自Java。我不使用SQL。但我之前也遇到过类似的问题,我将解释我是如何解决它的:我创建了一个对象类型为Class的数组列表。在你的情况下,这些是电话或信息。这些对象有特定的数据。然后,我将使用模型向列表中添加数据并更改模型,而不是列表。然后,我将创建一个包含数据的2D字符串数组。当你改变数据时,你只需要重新安排2D Array的创建方式。还可以使用循环来创建2D Array,这样你的列表就可以无限大。我用了所有的触发词。您可能希望自己研究一下如何使用SQL实现这一点。如果有帮助,请告诉我。