У меня есть таблица фильмов, в которой есть год и детали фильма, такие как название, идентификатор фильма (в середине) и таблица m_cast, где у меня есть все актеры в этом фильме.
Я хотел бы получить всех актеров, которые никогда не были безработными более 3 лет.(Предполагается, что актеры не работают между двумя последовательными фильмами)
Я придумал код, который
select a.yr1 y1 , b.yr2 y2 , a.yr1 - b.yr2 diff from
(select substr(substr(trim(year),-5),0,5) yr1 , * from movie m inner join m_cast p on m.mid = p.mid order by pid , yr1) a ,
(select substr(substr(trim(year),-5),0,5) yr2 , * from movie m inner join m_cast p on m.mid = p.mid order by pid, yr2) b on a.yr1 > b.yr2
where not exists
(select count(*) from movie m inner join m_cast p on m.mid = p.mid
and cast(substr(substr(trim(year),-5),0,5) as integer) < a.yr1 and cast(substr(substr(trim(year),-5),0,5) as integer) > b.yr2)
Самостоятельное объединение занимает много времени.И функции отставания и опережения не работают в версии SQLite, которую я использую.