oracle识别列的每个更改

时间:2016-03-29 14:17:37

标签: sql oracle

我有下表:

CC   | BEGIN               | END                 | ORDER

1215 | 20.03.2015 14:59:21 | 23.03.2015 13:47:19 | 1
1310 | 23.03.2015 13:47:19 | 27.03.2015 19:19:23 | 2
1105 | 27.03.2015 19:19:23 | 03.04.2015 18:10:22 | 3
1205 | 03.04.2015 18:10:22 | 04.04.2015 17:48:51 | 4
4650 | 04.04.2015 17:48:51 | 05.04.2015 13:28:20 | 5
1215 | 05.04.2015 13:28:20 | 10.04.2015 11:00:01 | 6
1310 | 12.04.2015 15:10:52 | 20.04.2015 09:44:39 | 7
1220 | 20.04.2015 09:44:39 | 22.04.2015 18:10:13 | 8
1220 | 23.04.2015 10:46:25 | 23.04.2015 10:49:08 | 9
1215 | 23.04.2015 10:49:08 | 23.04.2015 11:00:14 | 10
1215 | 23.04.2015 11:00:14 | 23.04.2015 11:47:45 | 11
1215 | 23.04.2015 11:47:45 | 29.04.2015 04:33:27 | 12
1215 | 29.04.2015 04:33:27 | 01.05.2015 16:46:53 | 13
2880 | 01.05.2015 16:46:53 | 06.05.2015 15:55:13 | 14
1210 | 06.05.2015 15:55:13 | 08.05.2015 16:35:40 | 15
1210 | 08.05.2015 16:35:40 | 15.05.2015 18:10:00 | 16
1205 | 17.05.2015 14:19:01 | 21.05.2015 15:29:08 | 17
1205 | 21.05.2015 15:29:08 | 24.05.2015 16:59:14 | 18
1205 | 24.05.2015 16:59:14 | 27.05.2015 14:33:59 | 19
1205 | 27.05.2015 14:33:59 | 01.06.2015 12:42:45 | 20
1205 | 27.05.2015 14:33:59 | 01.06.2015 12:42:45 | 20

我正在寻找一种方法来在每次CC列更改时添加唯一编号。 E.g:

CC   | BEGIN               | END                 | ORDER  | COLUMN I WISH FILL

1215 | 20.03.2015 14:59:21 | 23.03.2015 13:47:19 | 1      | 1 
1310 | 23.03.2015 13:47:19 | 27.03.2015 19:19:23 | 2      | 2
1105 | 27.03.2015 19:19:23 | 03.04.2015 18:10:22 | 3      | 3
1205 | 03.04.2015 18:10:22 | 04.04.2015 17:48:51 | 4      | 4
4650 | 04.04.2015 17:48:51 | 05.04.2015 13:28:20 | 5      | 5
1215 | 05.04.2015 13:28:20 | 10.04.2015 11:00:01 | 6      | 6
1310 | 12.04.2015 15:10:52 | 20.04.2015 09:44:39 | 7      | 7
1220 | 20.04.2015 09:44:39 | 22.04.2015 18:10:13 | 8      | 8
1220 | 23.04.2015 10:46:25 | 23.04.2015 10:49:08 | 9      | 8
1215 | 23.04.2015 10:49:08 | 23.04.2015 11:00:14 | 10     | 9
1215 | 23.04.2015 11:00:14 | 23.04.2015 11:47:45 | 11     | 9
1215 | 23.04.2015 11:47:45 | 29.04.2015 04:33:27 | 12     | 9
1215 | 29.04.2015 04:33:27 | 01.05.2015 16:46:53 | 13     | 9
2880 | 01.05.2015 16:46:53 | 06.05.2015 15:55:13 | 14     | 10
1210 | 06.05.2015 15:55:13 | 08.05.2015 16:35:40 | 15     | 11
1210 | 08.05.2015 16:35:40 | 15.05.2015 18:10:00 | 16     | 11
1205 | 17.05.2015 14:19:01 | 21.05.2015 15:29:08 | 17     | 12
1205 | 21.05.2015 15:29:08 | 24.05.2015 16:59:14 | 18     | 12
1205 | 24.05.2015 16:59:14 | 27.05.2015 14:33:59 | 19     | 12
1205 | 27.05.2015 14:33:59 | 01.06.2015 12:42:45 | 20     | 12

我尝试过使用LAG()和LEAD()函数,只有在CC列重复两次时它才能正常工作

2 个答案:

答案 0 :(得分:2)

这应该有效:

X

答案 1 :(得分:1)

通常使用RANK / DENSE_RANK函数来完成此操作。

请参阅DENSE_RANK documentation,您需要以某种方式使用它:

select ..., dense_rank() over (order by cc) column_i_wish, ...