1

我有下表:

+---------------------+-------+
| t                   | price |
+---------------------+-------+
| 2013-04-22 13:23:51 |  9.42 |
+---------------------+-------+

其中 t 是时间戳类型,价格是浮点数。

该表很大,大约有 500K 行。

任务:

我将显示表格和每行过去 3 天的最低价格。

所以我写了以下内容:

select *,(
  select max(b.price)
  from my_table b 
  where b.t<a.t and date(b.t)>=adddate(date(a.t),-3)
) from my_table a;

问题是它从来没有完成我的查询,看起来它挂了....有没有办法加快查询速度?还是我做错了什么?

4

3 回答 3

0

我会试试这个:

select *,(
  select max(b.price)
  from my_table b 
  where b.t between a.t - interval 3 day and a.t - interval 1 second
) from my_table a;

并确保 my_table.t 有一个索引:

alter table my_table add index ix_t (t);
于 2013-04-22T05:41:59.343 回答
0

此查询应该可以快速运行:

SELECT *,
    (   SELECT max(b.price)
        FROM my_table b
        WHERE b.t > a.t - interval 3 day
          AND b.t < a.t
    )
FROM my_table a

但你需要确保你有一个索引mytable(t)- 我假设这个字段是timestampor datetime

于 2013-04-22T05:42:48.627 回答
0

我认为您的 adddate 函数可能不正确。尝试像这样使用它:ADDDATE(at, INTERVAL -3 DAY)

于 2013-04-22T05:40:49.870 回答