Добавить серийный номер для каждого идентификатора на основе дат - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть набор данных, как показано ниже (кроме 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, кстати,

Я пробовал несколько вещей:

СЛУЧАЙ
КОГДА СЧЕТ (CaseID)> 1
ТОГДА ЗАКАЗАТЬ (Order_Date)
И Ser_no +1
END

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Спасибо за ваш ответ, Извините за недоразумение, потому что ser_no еще не в моей таблице. Это поле, которое нужно вычислить.

Я закончил это сам этим утром, но это выглядит почти так же, как ваша мера:

RANK () OVER (PARTITION BY CaseID, ORDER BY CaseID, Order_Date ASC

0 голосов
/ 06 сентября 2018

Прежде всего, хотя я не понимаю, что вы сделали, это дает вам то, что вы хотели. Серийный номер назначается по дате заказа. Проблема, которую я вижу, состоит в том, что результат показывает вам строки в неправильном порядке (1, 3, 2 вместо 1, 2, 3).

Чтобы отсортировать этот заказ, вы можете попробовать это:

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