Если посмотреть на ваш план объяснения, доступ к таблице будет только TASK
. Из этого я делаю вывод, что таблицы в вашем примере: ANOTHERTABLE
и TABLE
на самом деле являются одной и той же таблицей, и поэтому вы пытаетесь получить данные за последнюю неделю, которые существуют в этой таблице для каждого значения id
. .
Если все это правда, будет намного быстрее использовать функцию analyti c для получения максимального значения даты для каждого id
, а затем ограничения на основе этого.
Вот пример того, что я имею в виду. Обратите внимание: я использую «dte» вместо «date», чтобы избежать путаницы с зарезервированным словом «date».
LEFT JOIN ( SELECT lastweek.*,
max(dte) OVER ( PARTITION BY id ) max_date
FROM anothertable lastweek ) lastweek
ON 1=1 -- whatever other join conditions you have, seemingly omitted from your post
AND lastweek.dte >= lastweek.max_date - 7;
Опять же, это работает, только если я правильно считаю, что table
и anothertable
фактически одна и та же таблица.