gpt4 book ai didi

sql - 如何在 SQL 中添加序列/排序数据

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:57 24 4
gpt4 key购买 nike

我正在尝试向我的原始数据添加一个序列顺序,并且想知道是否有一种有效的方法可以在没有 while exists 循环的情况下执行此操作,因为我有超过百万的记录要排序。

示例数据集:

CustomerID  StartDate   EndDate    EnrollID
-------------------------------------------
1 1/1/1990 1/1/1991 14994
2 1/1/1990 1/1/1992 14995
2 1/1/1993 1/1/1995 14997
1 1/1/1992 1/1/1993 14996
1 1/1/1993 1/1/1994 14997
2 1/1/1995 1/1/1996 14998
3 1/1/1990 1/1/1991 15000
3 1/1/1992 1/1/1993 15001
3 1/1/1995 1/1/1996 15007

重新排序的数据应根据 min(startdate), min(enddate) , min(enrollid) 为每个客户 ID 添加序列/订单

最终输出数据集应如下所示,其中每个 customerID 记录按 min(StartDate)、min(EndDate)、min(EnrollID) 排序

CustomerID  StartDate   EndDate   EnrollID  Sequence_Order
----------------------------------------------------------
1 1/1/1990 1/1/1991 14994 1
1 1/1/1992 1/1/1993 14996 2
1 1/1/1993 1/1/1994 14997 3
2 1/1/1990 1/1/1992 14995 1
2 1/1/1993 1/1/1995 14997 2
2 1/1/1995 1/1/1996 14998 3
3 1/1/1990 1/1/1991 15000 1
3 1/1/1992 1/1/1993 15001 2
3 1/1/1995 1/1/1996 15007 3

需要在 T-SQL 中以最快的方式执行此操作

最佳答案

使用ROW_NUMBER()

SELECT CustomerID, StartDate, EndDate, EnrollID,
ROW_NUMBER() OVER(
PARTITION BY CustomerId
ORDER BY StartDate
,EndDate
,EnrollID
) AS Sequence_Order
FROM Table1

输出:

CustomerID  StartDate   EndDate EnrollID    Sequence_Order
1 1990-01-01 1991-01-01 14994 1
1 1992-01-01 1993-01-01 14996 2
1 1993-01-01 1994-01-01 14997 3
2 1990-01-01 1992-01-01 14995 1
2 1993-01-01 1995-01-01 14997 2
2 1995-01-01 1996-01-01 14998 3
3 1990-01-01 1991-01-01 15000 1
3 1992-01-01 1993-01-01 15001 2
3 1995-01-01 1996-01-01 15007 3

点击演示链接:

http://sqlfiddle.com/#!18/dbe66/2

关于sql - 如何在 SQL 中添加序列/排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49973472/

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