У меня есть таблица событий со следующими столбцами:Добавление справочных данных в столбец таблицы из другой строки таблицы
- последовательность (INT)
- DeviceID (VARCHAR (8))
- TIME_START (DateTime)
- DeviceState (SMALLINT)
- time_end (DateTime)
Все столбцы, кроме time_end, заполняются данными (мой текущий столбец time_end равен NULL через таблицу). Мне нужно будет заполнить столбец time_end данными о закрытии события. На самом деле это время, когда произошло новое событие с того же устройства. Вот модель пример данных, как она должна работать в конце:
sequence DeviceID time_start DeviceState time_end
--------------------------------------------------------------------------------------
1 000012A7 2010-10-31 12:00 14 2010-10-31 12:10
2 000012A7 2010-10-31 12:10 18 2010-10-31 12:33
3 000012A8 2010-10-31 12:20 16 2010-10-31 13:01
4 000012A7 2010-10-31 12:33 13 2010-10-31 12:47
5 000012A7 2010-10-31 12:47 18 2010-10-31 13:20
6 000012A8 2010-10-31 13:01 20 2010-10-31 13:23
7 000012A7 2010-10-31 13:20 05 2010-10-31 14:12
8 000012A8 2010-10-31 13:23 32 2010-10-31 14:15
9 000012A7 2010-10-31 14:12 12
10 000012A8 2010-10-31 14:15 35
Идея заключается в том, что для каждой записи в таблице нужно выбрать запись на высокой последовательности для конкретного устройства и обновления time_end с данные time_start этой записи более высокого уровня. С этим я смогу отслеживать период времени каждого события.
Я думал об этом с вызовом функции, но у меня есть две основные трудности: 1. Получение данных из, например: последовательность = 2 и обновление time_end последовательности = 1 2. создать функцию, которая будет делайте это непрерывно по мере добавления новых записей в таблицу
Я довольно новичок в SQL, и я совершенно потерял то, что еще возможно. Основываясь на моих знаниях, я должен использовать функцию, которая будет связывать данные вместе, но мои текущие знания ограничивают меня этим.
Я надеюсь, что кто-то может предоставить мне некоторое руководство, в какое направление идти, и предоставить мне некоторую обратную связь, если я на правильном пути или нет. Любые вспомогательные статьи будут очень оценены.
Для какой версии SQL Server? Если time_end всегда будет прежним time_start, зачем вообще его записывать - это избыточные данные, которые вы могли бы получить, выбрав time_start для deviceid и order by time_start value ... –
Чтобы добавить к тому, что предложил OMG Ponies, если это вопрос об избежании написания этой логики снова и снова, потому что вы планируете часто ее использовать, вы можете создать представление. –
@OMG Ponies: SQL server 2008 – Mark