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

Откуда:
Сообщений: 67
Всем добрый день !
Есть такая задачка

имеется таблица вида

CODE       NUMBER
----------------------
10               1
10               2
10               3
10               4
10              10
10              11 
10              12 
10              13
20               2
20               3 
20               4 
20              40  
20              41
20              42
20              43

Надо получить

CODE         START_NUMBER          END_NUMBER
10                     1                             4
10                   10                            13
20                     2                             4
20                   40                            43  


MSSQL 2012

Всем большое спасибо !
21 фев 13, 16:23    [13962110]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
1) пронумеруйте по порядку
2) отнимите поле NUMBER от получившегося на шаге 1 номера
3) сгруппируйте по получившемуся на шаге 2 значению
4) после группировки найдите минимум и максимум в поле NUMBER
21 фев 13, 16:27    [13962149]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WITH CTE AS(SELECT N=ROW_NUMBER()OVER(PARTITION BY CODE ORDER BY NUMBER),* FROM T)
SELECT CODE, START_NUMBER=MIN(NUMBER), END_NUMBER=MAX(NUMBER)
FROM CTE
GROUP BY CODE, NUMBER-N
ORDER BY CODE, START_NUMBER;
21 фев 13, 16:39    [13962237]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT
 T1.CODE
,START_NUMBER=T1.NUMBER
,END_NUMBER=
 (
  SELECT MIN(T2.NUMBER)
  FROM T T2
  WHERE T2.CODE=T1.CODE AND T2.NUMBER>=T1.NUMBER
    AND NOT EXISTS
    (
     SELECT *
     FROM T T3
     WHERE T3.CODE=T2.CODE AND T3.NUMBER=T2.NUMBER+1
    )
 )
FROM T T1
WHERE NOT EXISTS(SELECT * FROM T T2 WHERE T2.CODE=T1.CODE AND T2.NUMBER=T1.NUMBER-1);
21 фев 13, 16:51    [13962359]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Во втором запролсе ORDER BY забыл...

И ещё десяток вариантов...
21 фев 13, 16:53    [13962373]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
mccc
Member [заблокирован]

Откуда: Казань
Сообщений: 7650
iap
Во втором запролсе ORDER BY забыл...

И ещё десяток вариантов...

и когдаж, народ научится четко и ярко показать свои проблемы:
-- э[на работе], дурех принимают, с гонором, мышкой двигать не могут(уж, в стиле от дураков, ан, нет, есть еще дурее)
21 фев 13, 22:09    [13963765]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
mccc
iap
Во втором запролсе ORDER BY забыл...

И ещё десяток вариантов...

и когдаж, народ научится четко и ярко показать свои проблемы:
-- э[на работе], дурех принимают, с гонором, мышкой двигать не могут(уж, в стиле от дураков, ан, нет, есть еще дурее)
А какие свои прблемы я неярко показал?
22 фев 13, 09:22    [13964886]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
iap,

не берите в голову, вчера mccc и в других темах какой-то бред нес...
22 фев 13, 10:14    [13965167]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация с дырками  [new]
vaskabww
Member

Откуда:
Сообщений: 67
Большее спасибо, идею понял !
22 фев 13, 10:32    [13965295]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить