首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server :多个事务

SQL Server :多个事务
EN

Stack Overflow用户
提问于 2015-04-21 18:21:51
回答 5查看 106关注 0票数 1
代码语言:javascript
复制
select 
    STUDIO.NAME, MOVIE.TITLE, MOVIE.YEAR
from 
    STUDIO 
join 
    MOVIE on STUDIO.NAME = MOVIE.STUDIONAME
where 
    MOVIE.YEAR >= ALL (select MOVIE.YEAR from MOVIE)

我有这个代码,它给了我上一部电影的年份,它的标题和制作这部电影的制片厂的名称。

我如何重写这段代码,这样我就可以得到每个制片厂的最后一部电影,而不仅仅是一个制片厂?

EN

回答 5

Stack Overflow用户

发布于 2015-04-21 18:46:34

尝试:

代码语言:javascript
复制
SELECT a.NAME,
       a.TITLE,
       a.YEAR
FROM (select s.NAME, 
       m.TITLE, 
       m.YEAR,
       ROW_NUMBER()OVER(PARTITION BY s.NAME ORDER BY m.YEAR DESC ) as rnk
from STUDIO s
join MOVIE m on s.NAME = m.STUDIONAME) a
WHERE a.rnk = 1
票数 2
EN

Stack Overflow用户

发布于 2015-04-21 19:06:12

代码语言:javascript
复制
SELECT *
FROM (
SELECT STUDIO.NAME, MOVIE.TITLE, MOVIE.YEAR
from 
    STUDIO 
join 
    MOVIE on STUDIO.NAME = MOVIE.STUDIONAME
ORDER BY MOVIE.YEAR DESC
) AS newTable
GROUP BY newTable.NAME
票数 1
EN

Stack Overflow用户

发布于 2015-04-21 18:28:29

上面的答案对于查找制片厂发布电影的最近年份是很好的,但是如果你也需要标题,使用这种方法,你需要使用某种形式的子选择来根据制片厂名称获得最大的年份(以及最近的年份),然后根据这个引入标题。

下面使用交叉应用以相当简洁的方式完成这两个操作:

代码语言:javascript
复制
SELECT 
S.NAME,
MM.TITLE
MM.YEAR
FROM STUDIO S
CROSS APPLY 
    (SELECT TOP 1 TITLE, YEAR FROM MOVIE M
     WHERE M.STUDIONAME = S.STUDIO
     ORDER BY M.YEAR DESC) MM

第一次编辑:添加上下文第二次编辑:添加编辑注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29769437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档