[英]Is there an easier way to figure the query out
我有一个电影表,其中包含年份和电影详细信息,例如标题、电影 id(mid) 和一个表 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 版本中不起作用。
我假设电影表有一个名为 year 的列和一个用于标识演员姓名的列。 类似于:year int, actorId int
运行查询的最快方法是从您的电影表中过滤过去 3 年,然后按您的演员对不同的年数进行分组。
过滤 ActorId 年 1. 2018 1. 2018 1. 2017 2. 2016 2. 2017 2. 2018 后的示例
然后分组并选择不同的:从movieTable组中选择actorId,按actorId有count(distinct(Year))=3
这只会返回过去 3 年工作过的演员。 一旦您在该列中过滤掉了您的演员 ID,就可以连接到包含他们姓名的表。
抱歉我的写作格式 - 用我的手机写的。
问候, Jorge D. Lopez
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.