You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite技术问询:如何为每个Symbol查询10条升序数据

解决SQLite中每个Symbol取前10条数据的问题

要实现每个sym按t升序取前10条数据,你可以利用SQLite的窗口函数ROW_NUMBER()来分组编号,再筛选符合条件的行,具体方案如下:

核心思路

  1. 使用ROW_NUMBER() OVER (PARTITION BY sym ORDER BY t ASC)给每个sym分组内的行按t升序分配序号
  2. 外层查询筛选序号≤10的行,确保每个sym最多返回10条数据

代码实现

基于现有字符串拼接方式(适合静态/可信sym列表)

# syms列表会随新数据的导入和处理动态变更,此处为静态示例参考   
syms = "'O:SPY230118P00392000','O:SPY230118C00398000'"

query = """
SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY sym ORDER BY t ASC) AS row_num
    FROM data
    WHERE sym IN ({})
) AS ranked_data
WHERE row_num <= 10;
""".format(syms)

df = pd.read_sql(query, connectionDB)

参数化查询方式(更安全,避免SQL注入风险)

如果syms来自动态输入或不可信来源,建议使用参数化查询:

sym_list = ['O:SPY230118P00392000', 'O:SPY230118C00398000']
# 生成对应数量的占位符
placeholders = ', '.join(['?'] * len(sym_list))

query = """
SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY sym ORDER BY t ASC) AS row_num
    FROM data
    WHERE sym IN ({})
) AS ranked_data
WHERE row_num <= 10;
""".format(placeholders)

df = pd.read_sql(query, connectionDB, params=sym_list)

效果说明

执行后得到的df中,每个sym会保留按t升序排列的前10条数据,后续你可以正常使用groupby.get_group(symbol)进行分组处理。

内容的提问来源于stack exchange,提问作者CyberDEV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:10:34