IMDb 评级:只保留不同的记录
IMDb Ratings: Keeping only distinct records
我正在做一个个人项目,我正在查看一组朋友的 IMDb 电影评级。我正在尝试用所有电影及其属性创建一个主维度 table。当多人对一部电影进行评分时会出现重复,我想获得不同的电影列表。有 4 个属性会根据某人对电影的评分而变化:DateCreated、IMDb_Rating、Genre 和 Votes。我怎样才能只保留 "most recent" 数据的行?
这是一个正在发生的事情的例子:
如您所见,DateCreated 相同,但 IMDb_Rating、Genre 和 Votes 在某些行之间不同。我的解决方案是只保留得票最高的那一行。
在 pseudo-code 中,我想我会使用像 RANK() 这样的 window 排名函数,并按 投票。然后我会创建一个 table,其中只返回排名最高的行。
这有意义吗?对代码的任何帮助都是不可思议的!
select MovieID, Title, Director, Runtime, DateRelease,
MAX(Votes) as maxvotes
INTO #sometable
from yourtable
group by MovieID, Title, Director, Runtime, DateRelease
MAX
会做你需要的。然后,您可以使用 into
将得票最多的行插入新的 table.
另一种解决方案是使用 row_number
window 函数。
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;
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
我正在做一个个人项目,我正在查看一组朋友的 IMDb 电影评级。我正在尝试用所有电影及其属性创建一个主维度 table。当多人对一部电影进行评分时会出现重复,我想获得不同的电影列表。有 4 个属性会根据某人对电影的评分而变化:DateCreated、IMDb_Rating、Genre 和 Votes。我怎样才能只保留 "most recent" 数据的行?
这是一个正在发生的事情的例子:
如您所见,DateCreated 相同,但 IMDb_Rating、Genre 和 Votes 在某些行之间不同。我的解决方案是只保留得票最高的那一行。
在 pseudo-code 中,我想我会使用像 RANK() 这样的 window 排名函数,并按 投票。然后我会创建一个 table,其中只返回排名最高的行。
这有意义吗?对代码的任何帮助都是不可思议的!
select MovieID, Title, Director, Runtime, DateRelease,
MAX(Votes) as maxvotes
INTO #sometable
from yourtable
group by MovieID, Title, Director, Runtime, DateRelease
MAX
会做你需要的。然后,您可以使用 into
将得票最多的行插入新的 table.
另一种解决方案是使用 row_number
window 函数。
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;
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