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

Откуда: Россия, Красноярск.
Сообщений: 21759
2008 R2 , не могу пронумеровать как нужно:

DECLARE @t TABLE(Dt DATETIME, Cnt INT)  -- клонка Dt - PRIMARY KEY, без времени, только дата.
INSERT INTO @t
SELECT '19900101' , 5
UNION SELECT '19970109' , 2
UNION SELECT '20030820' , 2 
UNION SELECT '20050501' , 2 
UNION SELECT '20070101' , 0 
UNION SELECT '20070105' , 0 
UNION SELECT '20070601' , 2 
UNION SELECT '20080105' , 0 
UNION SELECT '20090105' , 3 

SELECT 
Dt,
Cnt,
ROW_NUMBER() OVER (PARTITION BY Cnt ORDER BY Dt) AS RowNumber
FROM @t
ORDER BY Dt


output:

Dt Cnt RowNumber
1990-01-01 00:00:00.000 5 1
1997-01-09 00:00:00.000 2 1
2003-08-20 00:00:00.000 2 2
2005-05-01 00:00:00.000 2 3
2007-01-01 00:00:00.000 0 1
2007-01-05 00:00:00.000 0 2
2007-06-01 00:00:00.000 2 4 здесь надо, чтобы RowNumber снова начинался с 1, поскольку Cnt изменился
2008-01-05 00:00:00.000 0 3 и тут
2009-01-05 00:00:00.000 3 1
1 фев 13, 11:04    [13860641]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в запросе,  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
DECLARE @t TABLE(Dt DATETIME, Cnt INT)  -- клонка Dt - PRIMARY KEY, без времени, только дата.
INSERT INTO @t
SELECT '19900101' , 5
UNION SELECT '19970109' , 2
UNION SELECT '20030820' , 2 
UNION SELECT '20050501' , 2 
UNION SELECT '20070101' , 0 
UNION SELECT '20070105' , 0 
UNION SELECT '20070601' , 2 
UNION SELECT '20080105' , 0 
UNION SELECT '20090105' , 3 
;with preSel as(
SELECT 
Dt,
Cnt,
ROW_NUMBER() OVER (PARTITION BY Cnt ORDER BY Dt) - ROW_NUMBER() OVER (ORDER BY Dt) AS RowNumber
FROM @t

)
select
*
,ROW_NUMBER() over (partition by RowNumber order by Dt) RowNumber2 
from preSel
ORDER BY Dt
1 фев 13, 11:45    [13860859]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в запросе,  [new]
serpentariy
Member

Откуда:
Сообщений: 265
Мистер Хенки
DECLARE @t TABLE(Dt DATETIME, Cnt INT)  -- клонка Dt - PRIMARY KEY, без времени, только дата.
INSERT INTO @t
SELECT '19900101' , 5
UNION SELECT '19970109' , 2
UNION SELECT '20030820' , 2 
UNION SELECT '20050501' , 2 
UNION SELECT '20070101' , 0 
UNION SELECT '20070105' , 0 
UNION SELECT '20070601' , 2 
UNION SELECT '20080105' , 0 
UNION SELECT '20090105' , 3 
;with preSel as(
SELECT 
Dt,
Cnt,
ROW_NUMBER() OVER (PARTITION BY Cnt ORDER BY Dt) - ROW_NUMBER() OVER (ORDER BY Dt) AS RowNumber
FROM @t

)
select
*
,ROW_NUMBER() over (partition by RowNumber, cnt order by Dt) RowNumber2 
from preSel
ORDER BY Dt
1 фев 13, 19:09    [13863844]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация в запросе,  [new]
sparrow
Member

Откуда: Россия, Красноярск.
Сообщений: 21759
Мистер Хенки , serpentariy , благодарю.
2 фев 13, 20:06    [13866485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить