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

Need to rank the data in SQL Server

提问人:Simma 提问时间:8/26/2022 最后编辑:marc_sSimma 更新时间:8/27/2022 访问量:43

问:

enter image description here

从输入数据中,我需要对 .数据按时间升序排列。id

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

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

因此,它在输出 1 表中的排名应为 1。

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

有可能变成这样吗?

sql sql-server sql-server-2005

评论

2赞 Thom A 8/26/2022
提问时,请不要上传代码/数据/错误的图片。
3赞 Thom A 8/26/2022
另外,您真正使用的是 SQL Server 2005 还是 2008?两者也完全不受支持,分别为 6 年和 3 年;无论您实际使用哪个,您都早就该升级了。

答:

1赞 The Impaler 8/27/2022 #1

根据 SQL Server 文档,在所有受支持的 SQL Server 版本上都可用。如果升级到当前版本之一,则可以运行查询:DENSE_RANK()

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赞 siggemannen 11/28/2023 #2

您可以执行 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 的方式进行 RANKing