按列中的最大数字筛选SQL结果

时间:2014-05-14 13:56:28

标签: sql sql-server

我有一个数据库表,用于存储要在报告上显示的数据。每次将记录插入数据库时​​,都会添加另一行,但ReportNumber行会递增。我一直在寻找,似乎找不到其他可能会问过这个问题的人。我需要存储过程来获取最新的报告信息(ReportNumber行中的最大数字)。我怎样才能做到这一点?这是一个例子。

Year     Data     ReportNumber
2014     135      1
2014     135      2
2014     136      1
2014     136      2

当我运行报告时,我只想显示基于ReportNumber的最新数据(本例中为2)

5 个答案:

答案 0 :(得分:1)

为什么不使用order by之类的

select * from 
report_table
order by
ReportNumber desc 

(OR)

select * from 
report_table
where ReportNumber = (select max(ReportNumber) from report_table)

答案 1 :(得分:1)

这样做了吗?

select * 
  from Table
 where ReportNumber in (select max(ReportNumber) 
                          from Table)

答案 2 :(得分:0)

假设我正确理解您的问题,您想要选择具有按年份和数据分组的最大报告编号的行吗?如果是这样,有很多方法。这是一个使用row_number()

的人
with cte as (
    select t.year, 
        t.data, 
         t.reportnumber, 
         row_number() over (partition by year, data order by reportnumber desc) rn
    from yourtable t
)
select *
from cte
where rn = 1

答案 3 :(得分:0)

如果要获取ReportNumber等于表中最大值的所有行:

SELECT yourTable.*
FROM yourTable
CROSS JOIN (SELECT Max(reportNumber) as maxRep)
WHERE yourTable.ReportNumber = maxRep

如果您想为每个数据值获取最新报告:

SELECT yourTable.*
FROM yourTable
CROSS JOIN (
    SELECT Data, Max(reportNumber) as maxRep 
    FROM yourTable 
    GROUP BY Data) as maxTable
ON yourTable.ReportNumber = MaxTable.maxRep
    AND yourTable.Data = MaxTable.Data

答案 4 :(得分:0)

如果您使用的是SQL Server 2005或更高版本,则还可以将TOPWITH TIES选项结合使用。这将选择具有相同(最大,因为排序)ReportNumber的所有记录。

SELECT TOP 1 WITH TIES *
FROM MyTable
ORDER BY ReportNumber DESC