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

Откуда: Израиль / Москва
Сообщений: 296
У меня есть главная таблица с данными: ResourceId, EndDate

И две других с такими же полями.

Если значение EndDate в главной таблице равно NULL, то мне нужно взять максимальное значение поля EndDate из двух других таблиц, которые с первой связаны по ResourceId.

Спасибо.
3 май 17, 17:16    [20454010]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36686
И что не получается у вас?
3 май 17, 17:24    [20454039]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
igoro1975
Member

Откуда: Израиль / Москва
Сообщений: 296
Гавриленко Сергей Алексеевич
И что не получается у вас?


Вы можете, пожалуйста, мне помочь? Я почти не знаком с SQL и сейчас передо мной стоит это задание. Спасибо.
3 май 17, 17:28    [20454065]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
Владислав Колосов
Member

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

Вам необходимо выбрать максимальное из объединения двух таблиц?

select max(t1.f)
from
(
select tbl1.f from tbl1
union all
select tbl2.f from tbl2
) t1 (f)
3 май 17, 17:32    [20454081]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
iiyama
Member

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

declare @main table(ResourceId int, EndDate date)
declare @t1 table(ResourceId int, EndDate date)
declare @t2 table(ResourceId int, EndDate date)

insert into @main values(1, '20170101'),(2,'20170202'),(3, NULL)
insert into @t1 values(3, '20170401'),(3,'20170402'),(3, NULL)
insert into @t2 values(3, '20170401'),(3,'20170502'),(3, NULL)

update M set EndDate = U.MaxEndDate
from @main M
	join
	 (
	   select ResourceId, max(EndDate) as MaxEndDate
	   from(
		select ResourceId, EndDate from @t1 
		union 
		select ResourceId, EndDate from @t2 
		)T
		group by ResourceId 	
	)U ON M.ResourceId = U.ResourceId
where M.EndDate IS NULL	
3 май 17, 17:33    [20454084]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
igoro1975
Member

Откуда: Израиль / Москва
Сообщений: 296
iiyama
igoro1975,

declare @main table(ResourceId int, EndDate date)
declare @t1 table(ResourceId int, EndDate date)
declare @t2 table(ResourceId int, EndDate date)

insert into @main values(1, '20170101'),(2,'20170202'),(3, NULL)
insert into @t1 values(3, '20170401'),(3,'20170402'),(3, NULL)
insert into @t2 values(3, '20170401'),(3,'20170502'),(3, NULL)

update M set EndDate = U.MaxEndDate
from @main M
	join
	 (
	   select ResourceId, max(EndDate) as MaxEndDate
	   from(
		select ResourceId, EndDate from @t1 
		union 
		select ResourceId, EndDate from @t2 
		)T
		group by ResourceId 	
	)U ON M.ResourceId = U.ResourceId
where M.EndDate IS NULL	

Получаю сообщение: Warning: Null value is eliminated by an aggregate or other SET operation.
3 май 17, 17:46    [20454153]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
[quot igoro1975]
iiyama
igoro1975,
Получаю сообщение: Warning: Null value is eliminated by an aggregate or other SET operation.

Это норма (с)
3 май 17, 17:53    [20454194]     Ответить | Цитировать Сообщить модератору
 Re: Как обновить поле в таблице, когда нужно взять максимальное значение из двух других таблиц  [new]
iiyama
Member

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

declare @main table(ResourceId int, EndDate date)
declare @t1 table(ResourceId int, EndDate date)
declare @t2 table(ResourceId int, EndDate date)

insert into @main values(1, '20170101'),(2,'20170202'),(3, NULL)
insert into @t1 values(3, '20170401'),(3,'20170402'),(3, NULL)
insert into @t2 values(3, '20170401'),(3,'20170502'),(3, NULL)

--update M set EndDate = U.MaxEndDate
select  M.ResourceId, U.MaxEndDate
from @main M
	join
	 (
	   select ResourceId, max(EndDate) as MaxEndDate
	   from(
		select ResourceId, EndDate from @t1 
		union 
		select ResourceId, EndDate from @t2 
		)T
		group by ResourceId 	
	)U ON M.ResourceId = U.ResourceId
where M.EndDate IS NULL
3 май 17, 17:55    [20454197]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить