IMDb评级:仅保留不同的记录

时间:2015-08-24 16:43:53

标签: sql sql-server-2012 window-functions

我正在开展一个个人项目,我正在观看一群朋友的IMDb电影评级。我试图制作一个包含所有电影及其属性的主尺寸表。当多个人评价一部电影并且我想获得不同的电影列表时,会有重复。根据人们对电影评分的时间,有4个属性会发生变化:DateCreated,IMDb_Rating,Genre和Votes。我怎样才能保留最近的""数据?

以下是正在发生的事情的一个例子:

enter image description here

如您所见,DateCreated是相同的,但某些行之间的IMDb_Rating,类型和投票是不同的。我的解决方案是保持最高票数。

在伪代码中,我想我会使用像RANK()这样的窗口排名功能,并按投票对每组MovieID,Title,Director,Runtime和DateRelease进行排名。然后我会创建一个表,只返回排名最高的行。

这有意义吗?任何有关代码的帮助都会令人难以置信!

2 个答案:

答案 0 :(得分:1)

select MovieID, Title, Director, Runtime, DateRelease,
MAX(Votes) as maxvotes
INTO #sometable
from yourtable
group by MovieID, Title, Director, Runtime, DateRelease

MAX会做你需要的。然后,您可以使用into将具有最多投票权的行插入到新表中。

另一个解决方案是使用row_number窗口函数。

select MovieID, Title, Director, Runtime, DateRelease,
IMDb_Rating, DateCreated, Genre
from
(select *, row_number() over(partition by movieid order by votes desc) as rn
 from yourtable) t
where rn = 1;

答案 1 :(得分:0)

Select <<column names>> 
INTO #sometable
From 
 (select *,
Row_Number() OVER(Partition by MovieID, Title, Director, Runtime, DateRelease Order by Votes Desc) as R_num
from yourtable
 ) Res
Where R_num = 1