我有一张表格:
创建表消息( id VARCHAR(40), src VARCHAR(40), 目标 VARCHAR(40), 时间 TIMESTAMP 默认 CURRENT_TIMESTAMP );
我想编写一个查询,它将返回所有 id 的列表(src 或 dest 字段)以及对应于最新消息的消息 id。我不太明白如何以GROUP BY
这种方式使用。此外,此查询需要快速(这就是为什么我不想简单地合并两个查询:一个用于 src,一个用于 dest)。但归根结底,性能是关键,不管它是如何完成的。
样本数据:
id、src、dest、时间 0, 0, 1, '2012-10-19 01:15:15' 1, 1, 0, '2012-10-20 01:15:15' 2, 0, 1, '2012-09-19 01:15:15' 3, 1, 0, '2012-04-20 01:15:15' 4, 2, 1, '2013-04-20 01:15:15' 5, 1, 0, '2012-04-20 01:15:15'
预期输出:
身份证,人 1, 0 4, 1 4, 2
当前查询:
SELECT m1.id,m1.src AS person FROM Messages m1 WHERE m1.time IS (SELECT MAX(time) FROM Messages m2 WHERE m2.src=m1.src OR m2.dest=m1.src) 联盟 SELECT m1.id,m1.dest AS person FROM Messages m1 WHERE m1.time IS (SELECT MAX(time) FROM Messages m2 WHERE m1.dest=m2.dest OR m1.dest=m2.src)
但是,对于具有 5163 行的表,这需要 19.99 秒。该查询有 26,661,730 步。