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

Откуда:
Сообщений: 8
возможно ли написать написать row_number для
следующей таблицы, отсортированной по f1
f1f2
01
12
22
31
41
53
63
73
82
92
нужно пронумеровать строки по f2 следующим образом (f3)
f1f2f3
011
121
222
311
412
531
632
733
821
922
7 фев 17, 13:33    [20188679]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Это же очень увлекательно реверсить принцип нумерцаии в поле f3 по числовому ряду. Пишите еще!
7 фев 17, 13:35    [20188706]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
алгоритм счетчика разжуйте?
7 фев 17, 13:40    [20188741]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
случайно до 3х пронумеровать?
7 фев 17, 13:41    [20188747]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Piles
возможно ли написать написать row_number для
следующей таблицы, отсортированной по f1
нужно пронумеровать строки по f2 следующим образом (f3)
f1f2f3
011
121
222
311
412
531
632
733
821
922

А в чем хитрость то? Как пробовали, что не получается?
7 фев 17, 13:48    [20188784]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Когда написал, то понял что хотел ТС.
7 фев 17, 13:50    [20188794]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
row_number() over (partition by f2 order by f1)
7 фев 17, 13:51    [20188801]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Piles
Member

Откуда:
Сообщений: 8
Mike_za
алгоритм счетчика разжуйте?

все просто, счетчик считает количество повторяющихся подряд значений в последовательности (f2)
7 фев 17, 13:55    [20188828]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
serpentariy
Member

Откуда:
Сообщений: 266
Piles,
with cte as
(select *
 from (values (0, 1), (1, 2), (2, 2), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3), (8, 2), (9, 2)) q(f1, f2)
)
select f1, f2, ROW_NUMBER() over (partition by rn order by f1)
from (select *, ROW_NUMBER() over(order by f1) - ROW_NUMBER() over (partition by f2 order by f1) rn
      from cte
     ) q
7 фев 17, 14:05    [20188886]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
msLex
Member

Откуда:
Сообщений: 9290
create table #t(f1 int, f2 int)
insert #t (f1, f2)
values 
	(0,	1)
	,(1, 2)
	,(2, 2)
	,(3, 1)
	,(4, 1)
	,(5, 3)
	,(6, 3)
	,(7, 3)
	,(8, 2)
	,(9, 2)



	select 
		f1
		, f2
		, f3 = row_number() over(partition by group_num order by f1)
	from (
		select 
			group_num = sum(new_group_mark) over (order by f1 rows unbounded preceding)
			, f1
			, f2
		from (
			select 
				new_group_mark = case when lag(f2, 1, null) over (order by f1) != f2 then 1 else 0 end
				, *
			from #t 
		
		) a
	) a 
	order by 
		f1
7 фев 17, 14:07    [20188895]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Piles
Member

Откуда:
Сообщений: 8
invm
row_number() over (partition by f2 order by f1)


ваш вариант неправильно нумерует
7 фев 17, 14:08    [20188904]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
TaPaK
Member

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

ого :)
если f1 сквозная нумерация, то вариант invm вроде самое оно
7 фев 17, 14:09    [20188908]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Piles
Member

Откуда:
Сообщений: 8
serpentariy , msLex

спасибо
7 фев 17, 14:12    [20188918]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
TaPaK
msLex,

ого :)
если f1 сквозная нумерация, то вариант invm вроде самое оно
Где же самое оно, если последовательности с f2=1 и f2=2 встречаются по два раза и нумеруются независимо с 1?
7 фев 17, 14:12    [20188919]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
msLex
Member

Откуда:
Сообщений: 9290
TaPaK
msLex,

ого :)
если f1 сквозная нумерация, то вариант invm вроде самое оно

нет, для второй группы "двоек" в "хотелке" ТС-а нумерация начинается заново
7 фев 17, 14:13    [20188923]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Может магия цифр, но вот за 2 сортировки
with cte as
(select *
 from (values (0, 1), (1, 2), (2, 2), (3, 1), (4, 1), (5, 3), (6, 3), (7, 3), (8, 2), (9, 2)) q(f1, f2)
)
,cte2 as(
select 

f1,f2, ff= ROW_NUMBER() over (partition by f2 order by f1)- f1
from cte
)

select 
	f1
	,f2
	,f3=ROW_NUMBER() over (partition by ff order by f1)
from cte2	
order by f1
7 фев 17, 15:12    [20189249]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
ROW_NUMBER() over (partition by f2 order by f1) - f1

Гениально!!!
Сам ломал голову как отдельно идентифицировать имеющуюся уже группу по f2 для начала нумерации, а тут такой простой способ!
Респект и уважуха!!!
8 фев 17, 08:32    [20191210]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Добрый Э - Эх
Guest
SQL2008
Гениально!!!
о-га - классика нумеровочного жанра. "инвариант группы" :)
8 фев 17, 08:39    [20191227]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Добрый Э - Эх, пришел и все опошлил сделал обыденным.
А так хотелось чуда с утра...
8 фев 17, 08:45    [20191251]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
Piles
Member

Откуда:
Сообщений: 8
SQL2008
ROW_NUMBER() over (partition by f2 order by f1) - f1

Гениально!!!
Сам ломал голову как отдельно идентифицировать имеющуюся уже группу по f2 для начала нумерации, а тут такой простой способ!
Респект и уважуха!!!


этот вариант не подходит, так как последовательность чисел в f1 не обязательно числа подряд, да и вообще f1 и f2 могут быть различных типов

вариант от serpentariy самое то

ROW_NUMBER() over(order by f1) - ROW_NUMBER() over (partition by f2 order by f1)
8 фев 17, 09:16    [20191369]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Piles
этот вариант не подходит, так как последовательность чисел в f1 не обязательно числа подряд, да и вообще f1 и f2 могут быть различных типов

Вообще уважаемый, вам минус в карму!
Исходные условия нужно чётче формулировать.
Люди ломают голову, предлагают вам, непротиворечивые с исходными условиями, работающие решения и вдруг, бац - "А тип полей может отличаться!","А в поле может быть дата!" или "А поле может быть NULL!"
8 фев 17, 09:54    [20191502]     Ответить | Цитировать Сообщить модератору
 Re: хитрый row_number  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
SQL2008
Вообще уважаемый, вам минус в карму!
Исходные условия нужно чётче формулировать.
Piles не удосужился даже сделать скрипт с данными.
8 фев 17, 13:29    [20192671]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить