如何解决在SQL中,如何比较同一表中两行的值并找到最大值,然后选择其整个行
我有一个表,我需要根据“时间”列中每个季度的时间来选择具有最高“得分值”的行。例如,上午1:00有两条记录,“得分值”为8和2,因此我只需要选择最高“得分值”为8的行。我尝试使用row_number()添加“行号”列结束(分区...),但不确定如何使用此列来选择每个季度的最高得分值。表结构的屏幕快照如下 Table with Data
解决方法
您已经90%了。
假设(您未说)SQL Server,则:
;with r as (
select <columnList>,row_number() over(partition by <qtr hour column> order by Score desc) rn
from table
)
select * from r where rn=1
如果没有qtr小时列,请使用类似
datepart(hour,timeColumn)*100+datepart(minute,timecolumn)/15
,
我不确定列名是否可以有空格。 无论如何,除了使用row_number之外,还可以使用具有以下结构/模式的子查询的联接来完成此操作:
select a.* from table_name a
inner join (
select time,max(scoring_value) as max_score from table_name group by time
) b on a.time = b.time and a.scoring_value = b.max_score
,
可能是您错过了DESC在row_number()中使用订单的功能
With ct as (
select *,ROW_NUMBER() over (partition by [Time] order by [Scoring value] desc) rn
from Table1)
Select * from ct where rn=1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。