我有一个事件结果表,我需要为给定的玩家列表获取每个玩家最近的 n 个事件。
这是在 iOS 上,所以它需要很快。我查看了很多使用子查询或连接的 top-n-per-group 解决方案,但即使在 macbook pro 上,这些解决方案对于我的 100k 行数据集也运行缓慢。到目前为止,我的愚蠢解决方案是执行 6 个单独的查询,因为我最多只能运行 6 个玩家。它不是很慢,但必须有更好的方法,对吧?这是我现在正在做的事情的要点:
results_by_pid = {}
player_ids = [1,2,3,4,5,6]
n_results = 6
for pid in player_ids:
results_by_pid[pid] = exec_sql("SELECT *
FROM results
WHERE player_id = #{pid}
ORDER BY event_date DESC
LIMIT n_events")
然后我继续我的快乐之路。但是我怎样才能把它变成一个单一的快速查询呢?