我正在开展一个个人项目,我正在观看一群朋友的IMDb电影评级。我试图制作一个包含所有电影及其属性的主尺寸表。当多个人评价一部电影并且我想获得不同的电影列表时,会有重复。根据人们对电影评分的时间,有4个属性会发生变化:DateCreated,IMDb_Rating,Genre和Votes。我怎样才能保留最近的""数据?
以下是正在发生的事情的一个例子:
如您所见,DateCreated是相同的,但某些行之间的IMDb_Rating,类型和投票是不同的。我的解决方案是保持最高票数。
在伪代码中,我想我会使用像RANK()这样的窗口排名功能,并按投票对每组MovieID,Title,Director,Runtime和DateRelease进行排名。然后我会创建一个表,只返回排名最高的行。
这有意义吗?任何有关代码的帮助都会令人难以置信!
答案 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