Почему группировка в подборе вызывает проблемы
-
21-09-2019 - |
Вопрос
Когда я включаю 2, прокомментированные строки в следующую подбору, кажется, что это займет вечно, пока мой сервер Sybase 12.5 ASE не получит каких -либо результатов. Без этих двух строк запрос работает в порядке. Что такого не так с этой группировкой?
select days_played.day_played, count(distinct days_played.user_id) as OLD_users
from days_played inner join days_received
on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and days_played.user_id in
(select sgia.user_id
from days_played as sgia
where sgia.day_played < days_played.day_played
--group by sgia.user_id
--having sum(sgia.B_first_msg) = 0
)
group by days_played.day_played
Решение 3
ОК, я узнал, в чем проблема, я должен был включить идентификатор пользователя в подраздел: «Где desy_played.user_id = sgia.user_id и sgia.day_played <shay_played.day_played"
Другие советы
Узнайте, что делает запрос, используя Showplan, чтобы показать объяснение.
В этом случае вы не можете устранить подпрограмму, сделав его частью основного запроса?
Не могли бы вы попробовать переписать запрос следующим образом?
select days_played.day_played,
count(distinct days_played.user_id) as OLD_users
from days_played
inner join days_received on days_played.day_played = days_received.day_received
and days_played.user_id = days_received.user_id
where days_received.min_bulk_MT > days_played.min_MO
and 0 = (select sum(sgia.B_first_msg)
from days_played as sgia
where sgia.user_id = days_played.user_id
and sgia.day_played < days_played.day_played
)
group by days_played.day_played
Я думаю, это должно дать вам лучшую производительность ...