根据日期为每个ID添加序列号

时间:2018-09-06 11:11:01

标签: case serial-number dense-rank

我有一个如下所示的数据集(Ser_NO除外,这是我要创建的字段)。

+--------+------------+--------+
| CaseID | Order_Date | Ser_No |
+--------+------------+--------+
|   44   | 22-01-2018 |   1    |
+--------+------------+--------+
|   44   | 24-02-2018 |   3    |
+--------+------------+--------+
|   44   | 12-02-2018 |   2    |
+--------+------------+--------+
|   100  | 24-01-2018 |   1    |
+--------+------------+--------+
|   100  | 26-01-2018 |   2    |
+--------+------------+--------+
|   100  | 27-01-2018 |   3    |
+--------+------------+--------+

如何根据我的日期获得每个CaseId的序列号。因此,特定CaseID中的第一个日期获取数字1,此CaseID中的第二个日期获取数字2,依此类推。 我正在使用T-SQL btw,

我尝试了一些事情:

案例
COUNT(CaseID)大于1
THEN ORDER BY(订购日期)
AND Ser_no +1
结束

谢谢。

2 个答案:

答案 0 :(得分:0)

首先,尽管我不明白您的所作所为,但它却为您提供了想要的东西。序列号是按日期顺序分配的。我看到的问题是结果显示的行顺序错误(1、3、2而不是1、2、3)。

要排序该顺序,您可以尝试以下操作:

SELECT *, ROW_NUMBER() OVER (PARTITION BY caseid ORDER BY caseid, order_date) AS ser_no
FROM [Table]

答案 1 :(得分:0)

感谢您的回复, 抱歉,我的表中还没有ser_no。这是一个要计算的字段。

我今天早上自己做完了,但是看起来几乎和您的测量一样:

RANK()OVER(按CaseID排序或按CaseID,Order_Date ASC排序