ios – 如何在sqlite中使用GROUP BY有效地获取n个最近的行?

我有一个事件结果表,我需要为给定的玩家列表获取每个玩家最近的n个事件.

这是在iOS上,所以它需要快速.我看过很多使用子查询或连接的top-n-group-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")

然后我继续我的快乐方式.但是,如何将其转换为单个快速查询?

最佳答案 没有更好的方法.

可能有帮助的SQL窗口函数未在SQLite中实现.

SQLite被设计为嵌入式数据库,其中大部分逻辑保留在应用程序中.
与应避免网络通信的客户端/服务器数据库相比,混合SQL命令和程序逻辑没有性能劣势.

一个不那么愚蠢的解决方案要求你事先在某处做一些SELECT player_id FROM,这应该没问题.

要使单个查询有效,请确保在两列player_id和event_date上有一个索引.

点赞