根据输入数据,我需要对
id
进行排名。数据按时间升序排列。
示例:id 号 421492036 有两条代码为“05”的记录,并且按时间升序排列。
ID 421492036 具有相同的代码 05,并且是表中的前两条记录。
所以它在输出1表中的排名应该是1。
在输出2表中,我们需要根据时间获取id为421492036的第一条记录。
有可能变成这样吗?
根据 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
您可以执行 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 年的方式进行排名