2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
優(yōu)化它的最簡單方法是創(chuàng)建一個(gè)程序,該程序:
將開始和結(jié)束日期作為參數(shù)
循環(huán)遍歷日期以查找星期日并將它們放入臨時(shí)表中
使用臨時(shí)表加入您的查詢并一次返回所有
通過這種方式,您可以執(zhí)行一次實(shí)際查詢而不是 52 次。應(yīng)該會(huì)快很多。
您需要檢查的另一件事是內(nèi)部查詢的GROUP BY
子句。查詢返回剛剛MAX(id)
所以GROUP BY
不需要。
臨時(shí)表的使用示例:
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貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
FLOOR((TO_DAYS(`date` - 737080)/7)
會(huì)給你一個(gè)“周數(shù)”,你可以使用它GROUP BY
。使用它應(yīng)該可以讓您一次性獲得所有結(jié)果,而不需要在其中包含應(yīng)用程序循環(huán)SELECT
。
我不明白 的重要性MAX(id)
,所以我無法解決其余的問題。
- 2 回答
- 0 關(guān)注
- 259 瀏覽
添加回答
舉報(bào)