首先,这是我尝试使用的查询。
SELECT * FROM Messages t WHERE perspective_user=? and timestamp BETWEEN ? AND ? AND
timestamp_added =
(select max(timestamp_added) from Messages t2
where
t2.author = t.author AND
t2.body = t.body AND
t2.timestamp = t.timestamp AND
t2.timestamp_added <= ?
) AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
代码在没有以下行的情况下正常工作,但是使用它,它会返回0结果。
AND convo_id IN (SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?);
我还验证了上面的代码可以自行运行,在基本的SELECT *查询上进行测试。我还确保数据库中有满足顶级查询的行。
数据是Skype消息的日志。日志是随机的;目标是获取仍在数据库中的最新日志。目标是能够绘制我的Skype消息图并做其他有趣的事情。 Skype在我的计算机上清除其旧数据库中的数据库。长的“timestamp_added”语句用于获取每条消息的最新信息,因此如果最新日志具有已清除的数据库,则仍会包含旧消息。
答案 0 :(得分:-1)
首先,我看到你在IN和括号之间有一个空格--MySQL“讨厌”它。修复它:
...AND convo_id IN(SELECT...
但如果只是主题发布拼写错误,那么请分享您的数据(Messages
和Conversations
的MySQL方案。
答案 1 :(得分:-1)
下面的语句返回一个行列表,其中您需要传递给IN()函数的是CSV。
(SELECT convo_id FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=?)
所以改为使用像这样的GROUP_CONCAT()
(SELECT GROUP_CONCAT(convo_id) FROM Conversations WHERE perspective_user=? AND identity=? AND timestamp_added=? GROUP BY convo_id)