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

Откуда:
Сообщений: 493
Есть таблица с данными:
index	ab_typ	ab_num	ag_code	ag_num	dat_in
2	6  	6100000001	02ТЮМ	0694	10.08.09
3	6  	6100000002	02ТЮМ	0694	10.08.09
4	6  	6100000003	02ТЮМ	0694	10.08.09
5	6  	6100000004	02ТЮМ	0694	10.08.09
6	6  	6100000500	02ТЮМ	0694	10.08.09
Необходимо получить результат:
ab_typ	ab_num_first	ab_num_last	ag_code	ag_num	dat_in
6  	6100000001	6100000004	02ТЮМ	0694	10.08.09
6  	6100000500	6100000500	02ТЮМ	0694	10.08.09
Подскажите как оптимально решить поставленную задачу?
9 сен 09, 13:48    [7636943]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
За оптимальность не скажу (да и не уверен что понял задачу)
но может автору надо это:
select *
  from [таблица с данными]
where index in (select min(index)
                  from [таблица с данными]
                union all
                select max(index)
                  from [таблица с данными])
?
9 сен 09, 13:53    [7636985]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
ага, там диапазоны... недоглядел
9 сен 09, 13:54    [7636995]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nikolay Gerasimov

Подскажите как оптимально решить поставленную задачу?

А где постановка задачи то ?
9 сен 09, 13:55    [7636998]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Glory
Nikolay Gerasimov

Подскажите как оптимально решить поставленную задачу?

А где постановка задачи то ?

Необходимо получить результат:.....
9 сен 09, 13:56    [7637007]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nikolay Gerasimov
Glory
Nikolay Gerasimov

Подскажите как оптимально решить поставленную задачу?

А где постановка задачи то ?

Необходимо получить результат:.....

Мда. Поди туда, не знаю куда, принеси то, не знаю что
9 сен 09, 14:01    [7637036]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Nikolay Gerasimov
Необходимо получить результат:.....
Результат-то будет
declare @t table(ind int, ab_typ int, ab_num bigint
   ,ag_code char(5), ag_num char(4), dat_in datetime)
insert into @t(ind, ab_typ, ab_num, ag_code, ag_num, dat_in)
select 2, 6, 6100000001, '02ТЮМ', '0694', '20090810' union all
select 3, 6, 6100000002, '02ТЮМ', '0694', '20090810' union all
select 4, 6, 6100000003, '02ТЮМ', '0694', '20090810' union all
select 5, 6, 6100000004, '02ТЮМ', '0694', '20090810' union all
select 6, 6, 6100000500, '02ТЮМ', '0694', '20090810'

select ab_typ
      ,min(ab_num) as ab_num_first
      ,max(ab_num) as ab_num_last
      ,ag_code, ag_num, dat_in
  from (select ab_typ, ab_num, ag_code, ag_num, dat_in
              ,ab_num - row_number() 
               over (partition by ab_typ, ag_code, ag_num, dat_in 
                     order by ab_num
                     ) as group_id
          from @t
        ) as t
 group by ab_typ, ag_code, ag_num, dat_in, group_id

ab_typ      ab_num_first         ab_num_last          ag_code ag_num dat_in
----------- -------------------- -------------------- ------- ------ -----------------------
6           6100000001           6100000004           02ТЮМ   0694   2009-08-10 00:00:00.000
6           6100000500           6100000500           02ТЮМ   0694   2009-08-10 00:00:00.000

(2 row(s) affected)
А вот будет ли он верным на других исходных данных - зависит от того,
насколько хорошо у меня проявились в этот раз телепатические способности
9 сен 09, 14:07    [7637066]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Nikolay Gerasimov

Необходимо получить результат:
ab_typ	ab_num_first	ab_num_last	ag_code	ag_num	dat_in
6  	6100000001	6100000004	02ТЮМ	0694	10.08.09
6  	6100000500	6100000500	02ТЮМ	0694	10.08.09
Подскажите как оптимально решить поставленную задачу?

Автор вы хоть опишите алгоритм сопоставления ab_num_first с ab_num_last
9 сен 09, 14:08    [7637067]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Алгоритм: необходимо получить диапазоны бланков с и по (увеличение номера бланка на 1). Если хотя-бы один бланк пропущен, то должен образоваться новый диапазон.
9 сен 09, 14:13    [7637106]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Для какого MSSQL запрос приведен? У меня реплика:
Server: Msg 195, Level 15, State 10, Line 15
'row_number' is not a recognized function name.
9 сен 09, 14:42    [7637309]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Nikolay Gerasimov
Для какого MSSQL запрос приведен? У меня реплика:
Server: Msg 195, Level 15, State 10, Line 15
'row_number' is not a recognized function name.

пункт 4
9 сен 09, 14:45    [7637329]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Nikolay Gerasimov
Для какого MSSQL запрос приведен? У меня реплика:
Server: Msg 195, Level 15, State 10, Line 15
'row_number' is not a recognized function name.


На 9 и 10 будет работать, у вас видать 8...
9 сен 09, 14:48    [7637344]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Вы правы, у меня версия 8.00.760(SP3)
9 сен 09, 14:51    [7637371]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Вы правы, у меня версия 8.00.760(SP3)
9 сен 09, 14:52    [7637390]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
Nikolay Gerasimov
Member

Откуда:
Сообщений: 493
Есть у кого-нибудь еще какие либо решения?
9 сен 09, 14:59    [7637443]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Nikolay Gerasimov
Есть у кого-нибудь еще какие либо решения?
взяв за основу первоисточник получим
declare @t table(ind int, ab_typ int, ab_num bigint
   ,ag_code char(5), ag_num char(4), dat_in datetime)
insert into @t(ind, ab_typ, ab_num, ag_code, ag_num, dat_in)
select 2, 6, 6100000001, '02ТЮМ', '0694', '20090810' union all
select 3, 6, 6100000002, '02ТЮМ', '0694', '20090810' union all
select 4, 6, 6100000003, '02ТЮМ', '0694', '20090810' union all
select 5, 6, 6100000004, '02ТЮМ', '0694', '20090810' union all
select 6, 6, 6100000500, '02ТЮМ', '0694', '20090810' union all
select 7, 6, 6100000501, '02ТЮМ', '0694', '20090810'

DECLARE @x TABLE (id int IDENTITY(1, 1), ab_typ int, ab_num bigint
   ,ag_code char(5), ag_num char(4), dat_in datetime)
   
INSERT @x (ab_typ, ab_num, ag_code, ag_num, dat_in)
select ab_typ, ab_num, ag_code, ag_num, dat_in
          from @t
          
SELECT min(ab_num) AS ab_num_1, max(ab_num) AS ab_num_2
FROM
(
select ab_typ, ab_num, ag_code, ag_num, dat_in,
ab_num - id AS group_id
          from @x
) t
GROUP BY ab_typ, ag_code, ag_num, dat_in, group_id
?
9 сен 09, 15:21    [7637605]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по групперовке  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
PaulYoung

SELECT min(ab_num) AS ab_num_1, max(ab_num) AS ab_num_2
...
SELECT ab_typ, min(ab_num) AS ab_num_first, max(ab_num) AS ab_num_last, ag_code, ag_num, dat_in
9 сен 09, 15:27    [7637642]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить