2 回答
TA贡献1829条经验 获得超7个赞
优化它的最简单方法是创建一个程序,该程序:
将开始和结束日期作为参数
循环遍历日期以查找星期日并将它们放入临时表中
使用临时表加入您的查询并一次返回所有
通过这种方式,您可以执行一次实际查询而不是 52 次。应该会快很多。
您需要检查的另一件事是内部查询的GROUP BY
子句。查询返回刚刚MAX(id)
所以GROUP BY
不需要。
临时表的使用示例:
create procedure sp_sample( in_start date, in_end date)
begin
declare v_date date;
SELECT in_start + INTERVAL 6 - weekday(in_start) day into v_date;
drop temporary table if exists sundays_tmp;
create temporary table sundays_tmp (
d date
);
while (v_date<in_end) do
insert into sundays_tmp values (v_date);
select v_date + INTERVAL 7 day into v_date;
end while;
-- Your query here
end
TA贡献1936条经验 获得超6个赞
FLOOR((TO_DAYS(`date` - 737080)/7)
会给你一个“周数”,你可以使用它GROUP BY
。使用它应该可以让您一次性获得所有结果,而不需要在其中包含应用程序循环SELECT
。
我不明白 的重要性MAX(id)
,所以我无法解决其余的问题。
- 2 回答
- 0 关注
- 245 浏览
添加回答
举报