Использование SQL Server 2008+ Не уверен, как задать вопрос, так вот некоторые примерные данные:SQL группе включения/выключения (бит) вместе, чтобы вычислить длительность
case_id start_time timer_name type value duration
8386 2013-02-01 19:25:52 Patient In 25 1 NULL
8386 2013-02-01 20:18:31 Patient Out 25 0 NULL
8386 2013-02-01 20:13:13 Anes. Start 26 1 NULL
8386 2013-02-01 20:18:37 Anes. Stop 26 0 NULL
8386 2013-02-01 20:13:25 Induction 27 1 NULL
8386 2013-02-01 20:18:41 Emergence 27 0 NULL
8386 2013-02-01 20:13:31 Incision 28 1 NULL
8386 2013-02-01 20:18:45 Closing 28 0 NULL
8451 2013-02-06 18:37:44 Anesthesia 1 1 NULL
8451 2013-02-06 18:37:48 Incision 1 1 NULL
8451 2013-02-06 18:05:32 Patient In 25 1 NULL
8451 2013-02-06 18:07:41 Anes. Start 26 1 NULL
8451 2013-02-06 18:11:00 Induction 27 1 NULL
8451 2013-02-06 18:11:54 Emergence 27 0 NULL
8451 2013-02-06 18:11:20 Incision 28 1 NULL
Вот это SQL я использую чтобы создать этот список:
SELECT case_id, start_time, timer_name, type, value, duration
FROM dbo.event AS ev WITH (nolock)
WHERE (type IN (1, 2, 3, 25, 26, 27, 28)) AND (defunct = 'N')
ORDER BY case_id, type, start_time
Что мне нужно сделать, это группа типов вместе, заказанные case_id, типа, и start_time, а затем рассчитать длительность между первой записью с 1 значением и следующий один с значение 0 того же типа. В приведенных выше данных, случай 8386 должен иметь следующие данные:
8386 2013-02-01 19:25:52 Patient In 25 1 52:39
8386 2013-02-01 20:13:13 Anes. Start 26 1 5:24
8386 2013-02-01 20:13:25 Induction 27 1 5:16
8386 2013-02-01 20:13:31 Incision 28 1 5:14
Надеюсь, я сделал математику правильно. Продолжительность не должна быть в этом формате. Я ожидаю, что количество секунд лучше, но этот формат легче читать в вопросе. Также не имеет значения, какое имя отображается в поле timer_name.
Поймите, что я могу получить несколько 1 значений для типа в строке или нескольких 0 значений в строке. Мне нужно связать первый 1 с первым 0 и вычислить эту продолжительность, а затем искать следующий 1 и т. Д. Это означает, что в каждом случае может быть несколько групп для каждого типа. Если для значения 1 нет значения 0, я буду использовать case_end_time, который я могу извлечь из другой таблицы.
Является ли это SQLServer или другой СУБД? –
Использование SQL Server 2008. Добавлено также и на вопрос. Благодаря! – mdutra