我尝试向我的原始数据添加一个序列顺序,并且想知道是否有一种有效的方法来做这件事而不存在一个循环,因为我有超过100万条记录要订购。
示例数据集:

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/

10-11 02:45
查看更多