Это мой пример данных
RollNo EnrollType EnrollStart EnrollEnd
---------------------------------------------
1 Maths 1/Jan/2019 1/Jan/2020
1 Science 1/Jun/2019 1/Jun/2020
1 Social 2/Jun/2020 2/Jun/2021
В приведенной выше таблице в первых двух строках указывается, что учащийся изменил свой тип зачисления в первоначально предполагаемую дату окончания. Таким образом, эффективная дата его первого зачисления должна быть 1 июня 2019 года.
Запрос, над которым я работаю, заключается в извлечении данных, как указано выше. Так что экстракт должен
1 maths 1/Jan/2019 1/Jun/2019
1 science 1/Jun/2019 1/Jun/2020
1 social 2/Jun/2020 2/Jun/2021
Запрос, который я написал:
Select
rollno, enrolltype, enrollstart,
case
when (select count(*) from student
where enrollstart > s.enrollstart and enrollstart < s.enrollend) > 1
then
(select top 1 enrollstart from student
where enrollstart > s.enrollstart and enrollstart < s.enrollend)
else enrollend
end
from
student s
Проблема в создании моей базы данных и реальных данных огромна, и этот запрос не кажется эффективным, так как он вызывает подзапрос дважды. Любой лучший способ извлечь это.