У меня есть таблица svn1:написание SQL-запрос в MySQL с подзапрос на том же столе
id | date | startdate
23 2002-12-04 2000-11-11
23 2004-08-19 2005-09-10
23 2002-09-09 2004-08-23
select id,startdate from svn1 where startdate>=(select max(date) from svn1 where id=svn1.id);
Теперь проблема в том, как я могу позволить знать подзапрос, чтобы соответствовать идентификатор с идентификатором во внешнем запросе. Очевидно, id = svn1.id не работает. Благодаря!
If you have the time to read more:
Это действительно упрощенная версия вопроса о том, что я действительно пытаюсь сделать здесь. мой фактический запрос что-то вроде этого
select
id, count(distinct archdetails.compname)
from
svn1,svn3,archdetails
where
svn1.name='ant'
and svn3.name='ant'
and archdetails.name='ant'
and type='Bug'
and svn1.revno=svn3.revno
and svn3.compname=archdetails.compname
and
(
(startdate>=sdate and startdate<=edate)
or
(
sdate<=(select max(date) from svn1 where type='Bug' and id=svn1.id)
and
edate>=(select max(date) from svn1 where type='Bug' and id=svn1.id)
)
or
(
sdate>=startdate
and
edate<=(select max(date) from svn1 where type='Bug' and id=svn1.id)
)
)
group by id LIMIT 0,40;
Как вы заметили, select max(date) from svn1 where type='Bug' and id=svn1.id
должен быть рассчитан много раз.
Могу ли я рассчитать это один раз и сохранить его с помощью AS
, а затем использовать эту переменную позже. Основная проблема заключается в том, чтобы исправить id=svn1.id
, чтобы правильно приравнять его к id во внешней таблице.
Большое спасибо. Это именно то, что я искал. Но это действительно увеличило время выполнения. Однако у меня нет индекса на столе. Каковы были бы лучшие столбцы для создания индекса, просто просмотрев запрос? или с использованием любого другого метода? – Gaurav
@Gaurav: добавьте определения этих таблиц в исходный вопрос. Трудно делать рекомендации, не понимая, как выглядят таблицы. Благодарю. –