gpt4 book ai didi

sql - T-SQL 上的 RANK、ROW_NUMBER

转载 作者:行者123 更新时间:2023-12-02 09:16:18 25 4
gpt4 key购买 nike

我在 SQL Server 2014 中有这样的行:

id | fld1
---+-----
1 | 100
2 | 100
3 | 80
4 | 102
5 | 100
6 | 80
7 | 102

我需要一个分区,无需更改顺序即可返回:

  NewFld | id | fld1
-------+----+------
1 | 1 | 100
1 | 2 | 100
2 | 3 | 80
3 | 4 | 102
1 | 5 | 100
2 | 6 | 80
3 | 7 | 102

Newfld 应返回基于 fld1 的相同值,而不更改 id 给出的顺序。

我尝试使用 ROW_NUMBERRANKDENSE_RANK 但对我不起作用。

查看this fiddle

最佳答案

在子查询中使用 min() over() 来建立 dense_rank() 所需的排序值。

SELECT id
, Fld1
, DENSE_RANK() OVER (order by fld1_idmin) AS Rank
FROM (
SELECT id
, fld1
, Min (id) over (partition by fld1) fld1_idmin
FROM yourtable
) d
ORDER BY ID

对于 FLD1 上的索引,使用这些窗口函数只需对此查询进行一次索引扫描。看这个SQLfiddle

关于sql - T-SQL 上的 RANK、ROW_NUMBER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com