我有下表:
+---------------------+-------+
| t | price |
+---------------------+-------+
| 2013-04-22 13:23:51 | 9.42 |
+---------------------+-------+
其中t是类型时间戳,价格是浮动。
表很大,大约500K行。
任务:
我将显示每行的表格和过去3天的MIN价格。
所以我写了以下内容:
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;
问题在于它完成了我的查询并且它看起来像是挂起的....有没有办法来查询?或者我做错了什么?
答案 0 :(得分:0)
我认为你的adddate函数可能不正确。尝试使用它:ADDDATE(a.t,INTERVAL -3 DAY)
答案 1 :(得分: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);
答案 2 :(得分: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)
上有索引 - 我认为此字段为timestamp
或datetime
。