我在 python 脚本中运行这样的查询
results = []
for day in days:
for hour in hours:
for id in ids:
query = "SELECT AVG(weight) from table WHERE date >= '%s' \
AND day=%s \
AND hour=%s AND id=%s" % \
(paststr, day, hour, _id)
results.append(query.exec_and_fetch())
或者对于不习惯 python 的人,对于每一天,对于那天的每一个小时,对于每个小时列表中的所有 id,我需要获取某些项目的平均重量。
举个例子:
day 0 hour 0 id 0
day 0 hour 0 id 1
...
day 2 hour 5 id 4
day 2 hour 6 id 0
...
这会导致很多查询,所以我在考虑是否可以在一个查询中执行此操作。我一直在摆弄视图,但我总是卡在不断变化的参数上,或者它们变得非常非常慢,这是一张相当大的桌子。
我最接近的猜测是:
create or replace view testavg as
select date, day, hour, id, (select avg(weight) from cuWeight w_i
where w_i.date=w_o.date
and w_i.day=w_o.day
and w_i.hour=w_o.hour)
from cuWeight w_o;
但这还没有返回任何东西,等了一两分钟后我取消了查询。
表如下所示:
CREATE TABLE `cuWeight` (
`id` int(11) NOT NULL default '0',
`date` date default NULL,
`hour` int(11) default '0',
`weight` float default '0',
`day` int(11) default '0',
KEY `id_index` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
myisam 和 latin1 是出于历史(几乎是化石)的原因。