需要对SQL Server中的数据进行排名

问题描述 投票:0回答:2

根据输入数据,我需要对

id
进行排名。数据按时间升序排列。

示例:id 号 421492036 有两条代码为“05”的记录,并且按时间升序排列。

ID 421492036 具有相同的代码 05,并且是表中的前两条记录。

所以它在输出1表中的排名应该是1。

在输出2表中,我们需要根据时间获取id为421492036的第一条记录。

有可能变成这样吗?

sql sql-server sql-server-2008 sql-server-2005
2个回答
1
投票

根据 SQL Server 文档

DENSE_RANK()
适用于所有支持的 版本的 SQL Server。如果您升级到当前版本之一,您可以运行查询:

select max(id), max(code), max(time), rk
from (
  select t.*, dense_rank() over(order by time) as rk from t
) x
group by rk

0
投票

您可以执行 TOP 1 WITH TIES 来仅获取第一行:

create table #t_id(id int, code varchar(30), time datetime)
insert into #t_id (id, code, time)
select 1, '05', '20200101'
union all
select 1, '05', '20200102'
union all
select 3, '05', '20200101'


select TOP 1 WITH TIES *
from #t_id t
ORDER BY (SELECT COUNT(*) FROM #t_id t2 WHERE t2.id = t.id AND t2.time < t.time)

COUNT(*) FROM #t_id t2 WHERE t2.id = t.id AND t2.time < t.time
可用于按照 2005 年的方式进行排名

© www.soinside.com 2019 - 2024. All rights reserved.