Cześć, mam takie zapytanie:
select fi.ID, (case when fi.st = 1 then max(ev2.date)
else max(ev.date) end) as lastOut
from tabela1 fi
left join tabela2 ed on ed.fiID = fi.ID
left join tabela3 ev on ev.eID = fi.eID and
dbo.get_date(ev.date) = dbo.get_date(ed.endDate) and
ev.deleted = 0 and (ev.isOut = 1 or ev.isOut is null)
left join tabela3 ev2 on ev2.eID = fi.eID and
ev2.date <= ed.endDate and
ev2.deleted = 0 and (ev2.isOut = 1 or ev2.isOut is null)
group by fi.id, fi.scheduleType
order by fi.ID
Jak widać joinuję 2 razy jedną tabelę, ale z różnymi warunkami.
W zależności of pola w tabeli FI odpowiednio liczę lastOut.
Niestety to zapytanie zajmuje mi ponad 20 sekund, gdzie bez case'a zajmuje sekundę, może kilka.
Czemu tak się wydłużyło i jak mógłbym to zoptymalizować?
[dopisane]
OK, udało mi się dodać po jednym warunku do złączeń i trwa teraz 3 sekundy. Jednak, jeśli ktoś widzi jeszcze jakąś opcję optymalizacji, to bym prosił o jakieś wskazówki :)