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

Откуда:
Сообщений: 329
MSSQL2005. Есть две таблицы с одинаковой структурой, одна накопительная, другая текщая, куда пишется хронология изменения значений параметров за сутки.
create table #main ([id] int identity(1,1),[Param] int not null,[Value] int not null,[BegTime] datetime not null,[EndTime] datetime not null)
create table #today ([id] int identity(1,1),[Param] int not null,[Value] int not null,[BegTime] datetime not null,[EndTime] datetime not null)
insert into #main values
(1,1,'2019-02-12 00:00:00','2019-02-12 01:17:13'),
(2,1,'2019-02-12 00:00:00','2019-02-12 23:59:59'),
(1,3,'2019-02-12 01:19:38','2019-02-12 07:37:13'),
(1,1,'2019-02-12 07:58:21','2019-02-12 14:29:08'),
(1,3,'2019-02-12 14:35:19','2019-02-12 21:07:41'),
(1,1,'2019-02-12 21:08:02','2019-02-12 23:55:57')
insert into #today values
(1,1,'2019-02-13 00:03:12','2019-02-13 03:24:49'),
(2,1,'2019-02-13 00:01:17','2019-02-13 23:58:47'),
(1,3,'2019-02-13 03:27:07','2019-02-13 07:15:51'),
(1,1,'2019-02-13 07:20:17','2019-02-13 23:57:41')

Нужно выполнить слияние данных таким образом, чтоб в таблице #main обновились записи (расширился EndTime), если значение соответствующего параметра не менялось в таблице #today, остальные добавились:
Param Value BegTime             EndTime
----- ----- ------------------- -------------------
1     1     2019-02-12 00:00:00 2019-02-12 01:17:13
2     1     2019-02-12 00:00:00 2019-02-13 23:58:47
1     3     2019-02-12 01:19:38 2019-02-12 07:37:13
1     1     2019-02-12 07:58:21 2019-02-12 14:29:08
1     3     2019-02-12 14:35:19 2019-02-12 21:07:41
1     1     2019-02-12 21:08:02 2019-02-13 03:24:49
1     3     2019-02-13 03:27:07 2019-02-13 07:15:51
1     1     2019-02-13 07:20:17 2019-02-13 23:57:41
13 фев 19, 10:58    [21808153]     Ответить | Цитировать Сообщить модератору
 Re: хитрое слияние данных  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31328
=Сергей=
Нужно выполнить слияние данных таким образом, чтоб в таблице #main обновились записи (расширился EndTime), если значение соответствующего параметра не менялось в таблице #today, остальные добавились:
То есть уникальным является сочетание [Param],[Value],[BegTime]?
13 фев 19, 11:27    [21808193]     Ответить | Цитировать Сообщить модератору
 Re: хитрое слияние данных  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
alexeyvg
То есть уникальным является сочетание [Param],[Value],[BegTime]?
да
13 фев 19, 11:32    [21808199]     Ответить | Цитировать Сообщить модератору
 Re: хитрое слияние данных  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7651
=Сергей=,

сравнивайте по ключу две таблицы, пишете UPDATE для пересекающихся, INSERT для выражения NOT EXISTS(). MERGE появился в 2005? Можно его использовать, чтобы одним запросом.
13 фев 19, 11:33    [21808204]     Ответить | Цитировать Сообщить модератору
 Re: хитрое слияние данных  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Владислав Колосов
сравнивайте по ключу две таблицы, пишете UPDATE для пересекающихся, INSERT для выражения NOT EXISTS(). MERGE появился в 2005? Можно его использовать, чтобы одним запросом.

Стратегия ясна :) merge в 2008
13 фев 19, 11:36    [21808209]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить