› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
billgreen1
V2EX  ›  MySQL

mysql 每组提取某日期前的 N 条数据?

  •  
  •   billgreen1 · Jan 12, 2016 · 3332 views
    This topic created in 3918 days ago, the information mentioned may be changed or developed.

    有一张表 stockprice,里面存的是 2800+股票的价格数据。

    我想提取某个日期前的,比如 2016-01-01 ,每个股票的 N 条数据。请问该怎么做啊?

    对于单个股票,我是用
    select date, tick,open,high,low,close,volume from stockprice
    where date < '2016-01-01' and tick='000001' and volume>0
    order by date desc
    limit N;

    这样的语句.(#volume>0 是剔除掉停牌数据)

    现在我只会写个循环,每个股票读取一次数据库。问题是整个程序跑下来要用 10 多分钟,但是真正程序运行时间不到 1 分钟。那么多时间都花在读取数据上了。

    我试过用
    select * from stockprice
    where dt < '2016-01-01'
    limit N * 2800; # 假设股票一共 2800 只。

    耗时 1 秒多一点。而且我的 N 不大,内存是够用的。所以一次读取数据库的话应该能快许多。

    现在的想法是按照股票代码分组,每组 N 条。
    在网上搜到一条可以用 join all , 但那是针对分组比较少的。

    连接
    http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

    应该比较符合我的要求,后面的代码有点难以理解。 能帮我解释下嘛?

    更宽泛一点的问题是,哪里可以练习写 sql 语句的? 普通的查询我还可以写,涉及到同一个表的和自己 join 的 /中间含有子查询的,我会遇到一点问题。想找个项目专门练习一下。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2337 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.