gpt4 book ai didi

sql - 当列值更改时对 Sql Server 表行进行排名

转载 作者:行者123 更新时间:2023-12-03 02:53:58 25 4
gpt4 key购买 nike

我在 SQL Server 中有一个像这样的表 -

ID  Employee_id  group_field_code   from_date              To_date
================================================================================
1 44855 055 2015-04-01 00:00:00 2015-04-02 17:37:26
2 44855 055 2015-04-02 17:37:27 2015-04-25 09:31:10
3 44855 055 2015-04-25 09:31:11 2015-09-18 14:58:59
4 44855 053 2015-09-18 15:00:00 2016-04-02 02:58:59
5 44855 055 2016-04-02 03:00:00 2016-05-26 02:58:59
6 44855 055 2016-05-25 13:25:23 2016-09-07 14:58:59
7 44855 055 2016-05-26 03:00:00 2016-05-25 13:25:22
8 44855 052 2016-09-07 15:00:00 2017-05-22 02:58:59
9 44855 055 2017-05-22 03:00:00 NULL

我想要的只是当组字段更改时行的新排名。就像-对于ID 1-3(group_code 55)我想要一个排名,对于ID 4(group_code更改,53)我想要另一个排名,然后对于ID 5(group_code 5重新到达)我想要另一个排名,依此类推。在 SQL Server 中使用 Rank 或其他函数可以实现这一点吗?

最佳答案

我们可以尝试使用行号差异法:

SELECT
ID, Employee_id, group_field_code, from_date, To_date,
DENSE_RANK() OVER (ORDER BY rank) rank
FROM
(
SELECT *,
ROW_NUMBER() OVER (ORDER BY from_date) -
ROW_NUMBER() OVER (PARTITION BY group_field_code ORDER BY from_date) AS rank
FROM yourTable
) t
ORDER BY t.from_date;

此处演示:

Rextester

关于sql - 当列值更改时对 Sql Server 表行进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44480750/

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