我有此查询,根据日期向我显示了id的最后一个id_units

我的查询是:

SELECT max(swg.id) AS id
 FROM swg
 WHERE swg.status != 0
 AND sg.dateswg <= TIMESTAMPADD(DAY,(6-WEEKDAY('2015-12-28')),'2015-12-28')
 GROUP BY swg.id_units
ORDER BY swg.id;


该查询返回了2000多个记录,我认为有一种方法可以执行此查询。

我正在尝试执行这样的查询:

SELECT id
FROM (SELECT * FROM swg WHERE status != 0 AND dateswg <= TIMESTAMPADD(DAY,(6-WEEKDAY('2015-12-28')),'2015-12-28') ORDER BY id_units, id desc) x
GROUP BY id_units;


这是可行的,但我想知道是否还有另一种方法可以改善它

看待!

最佳答案

这是您的查询:

SELECT max(swg.id) AS id
FROM swg
WHERE swg.status <> 0 AND
      swg.dateswg <= TIMESTAMPADD(DAY, 6 - WEEKDAY('2015-12-28'), '2015-12-28')
GROUP BY swg.id_units
ORDER BY MAX(swg.id);


优化起来很棘手,因为索引不能同时用于两种情况。您可以从查询中使用的所有四列上的复合索引开始:swg(dateswg, status, id_units, id)

10-08 04:06