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

Откуда: ОЗ
Сообщений: 109
Доброй всем пятницы 13го :)
У меня вопрос, ответа на который я пока не нашел.
Мне надо средствами SQL реализовать такую нехитрую задачу.
Имеем исходный набор данных:
13.05.2011 10:00:00 Кушаю 21
13.05.2011 10:23:00 Кушаю 5
13.05.2011 10:29:00 Работаю 25
13.05.2011 ... Работаю 5
13.05.2011 Работаю 15
13.05.2011 Кушаю 10
13.05.2011 Кушаю 5
13.05.2011 Отдыхаю 10
13.05.2011 Работаю 20
13.05.2011 Работаю 30
Необходимо на выходе:
13.05.2011 Кушаю 26
13.05.2011 Работаю 45
13.05.2011 Кушаю 15
13.05.2011 Отдыхаю 10
13.05.2011 Работаю 50

То есть нужно пронумеровать последовательные одинаковые статусы, а потом сгруппировать. Не подскажете?
13 май 11, 10:13    [10645436]     Ответить | Цитировать Сообщить модератору
 Re: Последовательная группировка  [new]
linke
Member

Откуда: Питер
Сообщений: 1402
vistix,

Кушаю и 21 В разных столбцах или в одном?
13 май 11, 10:26    [10645540]     Ответить | Цитировать Сообщить модератору
 Re: Последовательная группировка  [new]
vistix
Member

Откуда: ОЗ
Сообщений: 109
В разных. :) В наборе 3 поля.
13 май 11, 10:27    [10645552]     Ответить | Цитировать Сообщить модератору
 Re: Последовательная группировка  [new]
linke
Member

Откуда: Питер
Сообщений: 1402
vistix,

Sum+group by 
13 май 11, 10:28    [10645561]     Ответить | Цитировать Сообщить модератору
 Re: Последовательная группировка  [new]
vistix
Member

Откуда: ОЗ
Сообщений: 109
Спасибо за ответ. Парсю :)
13 май 11, 10:30    [10645580]     Ответить | Цитировать Сообщить модератору
 Re: Последовательная группировка  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
vistix
Спасибо за ответ. Парсю :)
Лучше бы оформили свой вопрос нормально.
  • Версия сервера - ??
  • Где CREATE TABLE - ??

    Поиском по форуму пользовались?
    Не далее, чем вчера была тема, напоминающая эту: https://www.sql.ru/forum/actualthread.aspx?tid=850188
    Таких тем было много.
  • 13 май 11, 10:37    [10645636]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    vistix
    Member

    Откуда: ОЗ
    Сообщений: 109
    Что-то не могу я спроецировать Ваш ответ на свой мозг... Не могли бы Вы написать подробнее, или кто-нибудь кто понял, направьте, пожалуйста.
    13 май 11, 10:38    [10645649]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    AmKad
    Member

    Откуда:
    Сообщений: 5308
    + При однозначной сортировке по дате
    with s as
    (select 01 dt, 'Кушаю'   f, 21 sm union all
     select 02 dt, 'Кушаю'   f, 05 sm union all
     select 03 dt, 'Работаю' f, 21 sm union all
     select 04 dt, 'Работаю' f, 05 sm union all
     select 05 dt, 'Кушаю'   f, 21 sm union all
     select 06 dt, 'Отдыхаю' f, 10 sm union all
     select 07 dt, 'Отдыхаю' f, 80 sm union all
     select 08 dt, 'Кушаю'   f, 21 sm union all
     select 09 dt, 'Кушаю'   f, 27 sm union all
     select 10 dt, 'Отдыхаю' f, 40 sm
    )
    select f, sum(sm), min(dt) mn_dt, max(dt) mx_dt
    from
     (select dt, f, sm,
      row_number() over (               order by dt) -
      row_number() over (partition by f order by dt) rn
      from s
     )s 
    group by f, rn
    order by mn_dt;
    13 май 11, 10:40    [10645664]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    vistix
    Member

    Откуда: ОЗ
    Сообщений: 109
    Я сильно извиняюсь :)
    declare @tbl table (dt DateTime , Status VARCHAR(20), Duration INT)

    INSERT INTO @tbl
    ([dt],[STATUS],[Duration])
    select GETDATE(), 'Кушаю', 13
    union all
    select GETDATE(), 'Кушаю', 15
    union all
    select GETDATE(), 'Работаю', 13
    union all
    select GETDATE(), 'Работаю', 10
    union all
    select GETDATE(), 'Работаю', 11
    union all
    select GETDATE(), 'Кушаю', 13
    union all
    select GETDATE(), 'Кушаю', 13
    13 май 11, 10:45    [10645710]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    vistix
    Member

    Откуда: ОЗ
    Сообщений: 109
    Спасибо всем, кто отвечал!!!
    AmKad, самое большое спасибо! :)
    13 май 11, 10:47    [10645730]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    iljy
    Member

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

    мульен раз были темы - объединение интервалов называются
    declare @t table(d date, sn int, s varchar(30), val int)
    insert @t values
    ('13.05.2011', 1,'Кушаю', 21),
    ('13.05.2011', 2,'Кушаю', 5),
    ('13.05.2011', 3,'Работаю', 25),
    ('13.05.2011', 4,'Работаю', 5),
    ('13.05.2011', 5,'Работаю', 15),
    ('13.05.2011', 6,'Кушаю', 10),
    ('13.05.2011', 7,'Кушаю', 5),
    ('13.05.2011', 8,'Отдыхаю', 10),
    ('13.05.2011', 9,'Работаю', 20),
    ('13.05.2011', 10,'Работаю', 30)
    
    select d, s, SUM(val) val
    from(
    	select *, ROW_NUMBER() over(order by sn) rn1, ROW_NUMBER() over(partition by d,s order by sn) rn2
    	from @t
    )t
    group by d,s, rn2-rn1
    order by MIN(sn)
    13 май 11, 10:48    [10645735]     Ответить | Цитировать Сообщить модератору
     Re: Последовательная группировка  [new]
    vistix
    Member

    Откуда: ОЗ
    Сообщений: 109
    Я прошу прощения :)
    Неверно искал...
    13 май 11, 11:15    [10645978]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить