Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нумерация по порядку в зависимости от даты  [new]
Полина
Member

Откуда: Петербург
Сообщений: 205
Помогите плз, что-то ничего не придумать...
Есть таблица, в ней условно 3 поля:
keyDate Num
1 2016-01-010
2 2016-01-010
3 2016-01-010
4 2016-01-020
5 2016-01-020
6 2016-01-050


В поле Date - Даты. Num пока заполнен 0.
Записей с датами разное кол-во: в моем примере строк с 01,01,2016 - 3, 02,01,2016-2, 05,01,2016 - 1. Есть даты, строк с которыми гораздо больше. Например 12,01,2016 - 20000 строк.
Нужно пронумировать Num в пределах даты. Num не может быть больше 999 - в такой ситуации пронумировать любые 999 записей этой даты и остальные оставить как есть.
В идеале для тех записей, у которых остался Num=0, к дате будет добавлена 1 секунда и следующие любые 999 записей новой даты
также получат нумерацию...
14 мар 16, 14:33    [18928419]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
И в чем проблема использовать row_number с over и partition ?
14 мар 16, 14:41    [18928490]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Полина,

ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Date)

автор
В идеале для тех записей, у которых остался Num=0, к дате будет добавлена 1 секунда и следующие любые 999 записей новой даты
также получат нумерацию...

звучит странновато
14 мар 16, 14:45    [18928530]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
Полина
Member

Откуда: Петербург
Сообщений: 205
update Payment set Num = ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Date)


Msg 4108, Level 15, State 1, Line 1
Windowed functions can only appear in the SELECT or ORDER BY clauses.

Select работает, обновить данные не дает... В этом и проблема :(
14 мар 16, 14:55    [18928630]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Полина,

Полина,

может и хелп почитать стоит...

UPDATE Payment
SET Num = rowNumber
FROM
(
SELECT key,
ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Date) as rowNumber
FROM Payment
) a
WHERE
a.Key = table.key
14 мар 16, 15:01    [18928690]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
Полина
Member

Откуда: Петербург
Сообщений: 205
Спасибо, только что нарисовала подобную конструкцию :)

Подскажите пожалуйста еще, можно было вместо row_number использовать rank ?
14 мар 16, 15:02    [18928707]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
_djХомяГ
Guest
;with cte 
as
(
   select *,ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Date) as RN
  from таблица


)
update cte set NUM=RN
14 мар 16, 15:03    [18928711]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
Glory
Member

Откуда:
Сообщений: 104751
Полина
Подскажите пожалуйста еще, можно было вместо row_number использовать rank ?

Использовать просто так или для получения нужного результата ?
https://msdn.microsoft.com/en-us/library/ms189798.aspx
14 мар 16, 15:11    [18928790]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Полина,

автор
Подскажите пожалуйста еще, можно было вместо row_number использовать rank ?

нет, ранжирование и порядковый номер это немного разное

автор
_djХомяГ

хороший вариант
14 мар 16, 15:11    [18928793]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
_djХомяГ
Guest
MSDN
Если две и более строки претендуют на один ранг, то все они получат одинаковый ранг. Например, если двум лучшим продавцам соответствует одинаковое значение SalesYTD, им обоим присваивается ранг 1.

Оно Вам надо?
14 мар 16, 15:14    [18928813]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация по порядку в зависимости от даты  [new]
Полина
Member

Откуда: Петербург
Сообщений: 205
Спасибо! За примеры и ссылки особенно!
14 мар 16, 15:17    [18928832]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить