Добавление справочных данных в столбец таблицы из другой строки таблицы - PullRequest
2 голосов
/ 31 октября 2010

У меня есть таблица событий со следующими столбцами:

  • sequence (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. Получение данных, например: sequence =2 и обновление time_end sequence = 1 2. создание функции, которая будет делать это непрерывно, когда новые записи добавляются в таблицу

Я совершенно новичок в SQL и совершенно не понимаю, что ещевозможно.Основываясь на моих знаниях, я должен использовать функцию, которая будет ссылаться на данные вместе, но мои нынешние знания ограничивают меня в этом.

Я надеюсь, что кто-то может дать мне некоторое руководство в каком направлении идти и дать мненекоторые отзывы, если я на правильном пути или нет.Любые статьи поддержки будут очень признательны.

Ответы [ 2 ]

0 голосов
/ 31 октября 2010

@ OMG Ponies: думаю, здесь будет немного лучшее форматирование:

ОБНОВИТЬ YOUR_TABLE SET time_end = (ВЫБЕРИТЕ ТОП 1 t.time_start FROM YOUR_TABLE t ГДЕ t.DeviceID = YOUR_TABLE.DeviceID И t.time_start> YOUR_TABLE.time_start ЗАКАЗАТЬ ПО t.time_start ASC)

0 голосов
/ 31 октября 2010

Просмотр:

CREATE VIEW tableview AS
with timerank AS
(
SELECT mytable.*, ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY time_start) as row
FROM THE_TABLE mytable
)
SELECT tstart.*, tend.time_start AS time_end
FROM timerank tstart 
    LEFT JOIN timerank tend ON tstart.row = tend.row - 1 
    AND tstart.DeviceID = tend.DeviceID

Редактировать: Теперь я вижу ваше требование ID устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...