简体   繁体   English

从表中显示每个出版商的最新出版书籍的查询

[英]A query that shows latest published books from each publisher from a table

I'm trying to write a query that show latest published books from each publisher from a table like this我正在尝试编写一个查询,从这样的表中显示每个出版商的最新出版书籍

bookcode书号 Name名称 Publisher出版商 PublishYr出版年份
61523 61523 c++时间:2019-05-06 标签:c++ Pearson皮尔逊 2018 2018年
54681 54681 python Python sybex sybex 2017 2017年
45168 45168 sql sql RELX悦刻 2019 2019年
79137 79137 c# C# Macmillan麦克米伦 2016 2016年
89451 89451 ccna中央社 Pearson皮尔逊 2020 2020年
45187 45187 lpic 1图 1 RELX悦刻 2021 2021年
16497 16497 ccnp中央电视台 sybex sybex 2018 2018年
19437 19437 lpic 2照片 2 Penguin企鹅 2019 2019年

and desired table in query should be:查询中所需的表应该是:

Publisher出版商 name名称
Pearson皮尔逊 ccna中央社
sybex sybex ccnp中央电视台
RELX悦刻 lpic 1图 1
Macmillan麦克米伦 c# C#
Penguin企鹅 lpic 2照片 2

Here is one way using window functions:这是使用窗口函数的一种方法:

select * from (
   select * , row_number() over (partition by publisher order by PublishYr desc) rn
   from tablename
) t where rn = 1 

The query doesn't need a subquery if you use SELECT TOP(1) WITH TIES .如果您使用SELECT TOP(1) WITH TIES则查询不需要子查询。

select top(1) with ties publisher, book_name, 
                   row_number() over (partition by Publisher 
                                      order by PublishYr desc) rn
from TableWithData
order by rn;

Get maximum year per publisher as subquery and join with source table.获取每个发布者的最大年份作为子查询并加入源表。

Select tablename.Publisher, tablename.Name
From tablename
Inner Join (
    Select max(PublishYr) As MaxPublishYr, Publisher
    From tablename 
    Group By Publisher
) as Subqry on Subqry.Publisher = tablename.Publisher
    and Subqry.MaxPublishYr = tablename.PublishYr

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM