【发布时间】:2015-08-21 00:11:29
【问题描述】:
我有一个包含复合主键(ID、Date)的表,如下所示。
Date 列上还有一个单独的索引。该表大小适中,目前约 600k 行,每天增长约 2k。
我想做一个 SELECT 查询,返回每个 ID 的最新 3 条记录(按 Date 时间戳排序)。对于每个给定的ID,Date 的值始终是唯一的,因此这里无需担心Date 的关系。
受this answer 的启发,我尝试了一种自加入方法,但运行了好几秒钟却什么也没返回:
SELECT p1.ID, p1.Date, p1.Value FROM MyTable AS p1
LEFT JOIN MyTable AS p2
ON p1.ID=p2.ID AND p1.Date<=p2.Date
GROUP BY p1.ID
HAVING COUNT(*)<=5
ORDER BY p1.ID, p1.Date DESC;
这里有什么快速的解决方案?
【问题讨论】:
标签: sql sqlite group-by sql-order-by greatest-n-per-group