首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据多列中的最大值检索SQL中的行

根据多列中的最大值检索SQL中的行
EN

Stack Overflow用户
提问于 2018-05-29 15:34:06
回答 3查看 95关注 0票数 1

我有一个具有以下字段的SQL表:

  • 公司ID
  • 公司名称
  • 财政年度
  • 财政季度

每个公司都有不同财政年度和财政季度的多项记录。我希望根据最大财政年度和最大财政季度检索每个公司的行。例如,如果表具有以下内容:

代码语言:javascript
复制
Company ID  |  Company Name  |  Fiscal Year | Fiscal Quarter 
1           |  Test1         |  2017        | 1
1           |  Test1         |  2017        | 2
1           |  Test1         |  2018        | 1
1           |  Test1         |  2018        | 2
2           |  Test2         |  2018        | 3
2           |  Test2         |  2018        | 4

查询应返回以下内容(仅返回该年度的最高财政年度和最高财政季度的记录):

代码语言:javascript
复制
Company ID  |  Company Name  |  Fiscal Year | Fiscal Quarter 
1           |  Test1         |  2018        | 2
2           |  Test2         |  2018        | 4

我可以使用以下查询获取具有最高财政年度的记录,但不确定如何在年内进一步选择最大季度:

代码语言:javascript
复制
SELECT fp.companyId, fp.companyname, fp.fiscalyear,fp.fiscalquarter
FROM  dbo.ciqFinPeriod fp
  LEFT OUTER JOIN dbo.ciqFinPeriod fp2
    ON (fp.companyId = fp2.companyId AND fp.fiscalyear < fp2.fiscalyear)
WHERE fp2.companyId IS NULL

非常感谢您的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-29 15:35:42

如果你有一份公司名单,我会简单地做:

代码语言:javascript
复制
select fp.*
from Companies c outer apply
     (select top (1) fp.*
      from dbo.ciqFinPeriod fp
      where fp.companyId = c.companyId
      order by fp.fiscalyear desc, fp.fiscalquarter desc
     ) fp;

如果不是,那么row_number()可能是最简单的方法:

代码语言:javascript
复制
select fp.*
from (select fp.*,
             row_number() over (partition by fp.companyId order by order by fp.fiscalyear desc, fp.fiscalquarter desc) as seqnum
      from dbo.ciqFinPeriod fp
     ) fp
where seqnum = 1;

或者更深奥的(聪明?):

代码语言:javascript
复制
select top (1) with ties fp.*
from dbo.ciqFinPeriod fp
order by row_number() over (partition by fp.companyId order by order by fp.fiscalyear desc, fp.fiscalquarter desc)
票数 3
EN

Stack Overflow用户

发布于 2018-05-29 16:12:25

我在以下方面取得了一些成功,与您的输出相同。

代码语言:javascript
复制
create table #table
(
CompanyID int,
CompanyName varchar(200),
Year int,
Quater int
)

insert into #table (CompanyID,CompanyName,Year,Quater)
VALUES

('1','Test1','2017','1'),
('1','Test1','2017','2'),
('1','Test1','2018','1'),
('1','Test1','2018','2'),
('2','Test2','2018','3'),
('2','Test2','2018','4')

SELECT CompanyID,CompanyName,Year,Quater  
FROM
(

Select CompanyID,CompanyName,Year,Quater
, ROW_NUMBER() OVER(PARTITION BY CompanyID ORDER BY Year desc,Quater DESC)         
as RowNum
from #table

) X  WHERE RowNum = 1

drop table #table
票数 0
EN

Stack Overflow用户

发布于 2018-05-29 18:33:35

选择公司I'd,公司名称,最多(年份),最大(季度)组按1,2

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

https://stackoverflow.com/questions/50588111

复制
相关文章

相似问题

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