у меня есть стол
с 5 столбцами: -
- Код страны
- Язык
- Складской
- ActiveFrom
- ActiveTo
Подмножество данных (извинения за несогласованность заголовков столбцов: -
Country
Code
Language
Warehouse
ActiveFrom ActiveTo
AT de BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
AT de WGN 2011-02-14 00:00:00.000 9999-12-31 23:59:59.000
BE fr BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
BE fr WGN 2011-02-14 00:00:00.000 9999-12-31 23:59:59.000
CH de WGN 2011-02-14 00:00:00.000 9999-12-31 23:59:59.000
CZ sk BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
CZ sk WGN 2011-02-14 00:00:00.000 9999-12-31 23:59:59.000
DE de BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
DE de WGN 2011-02-14 00:00:00.000 9999-12-31 23:59:59.000
Я хочу обновить столбец ActiveTo до значения даты ActiveFrom (дать или взять несколько миллисекунд) для того же хранилища.
Я пробовал это: -
update Translations
set ActiveTo = DateAdd(ms, -3, ot.ActiveFrom)
from Translations ot
Where Warehouse = 'WGN'
and CountryCode = ot.CountryCode
но, это дает эти результаты.
CountryCode Language Warehouse ActiveFrom ActiveTo
AT de BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
AT de WGN 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997
BE fr BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
BE fr WGN 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997
CH de WGN 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997
CZ sk BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
CZ sk WGN 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997
DE de BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
DE de WGN 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997
Это обновляет правильные строки. Но значение неверное, оно вычитает 3 миллисекунды из собственной даты ActiveFrom вместо другой даты начала хранилища.
Этот SQL дает правильные результаты в производной таблице: -
select t.CountryCode, t.Warehouse, DateAdd (ms, -3, ot.ActiveFrom) as 'TransferToBHU', t.ActiveFrom, t.ActiveTo,
ot.CountryCode, ot.Warehouse, ot.ActiveFrom, ot.ActiveTo
from Translations t
inner join Translations ot
on ot.CountryCode= t.CountryCode
, где t.Warehouse = 'WGN'
и ot.Warehouse = 'BHU'
Заказ по t.CountryCode
CountryCode Warehouse TransferToBHU ActiveFrom ActiveTo CountryCode Warehouse ActiveFrom ActiveTo
AT WGN 2011-08-07 23:59:59.997 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997 AT BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
BE WGN 2011-08-31 23:59:59.997 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997 BE BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
CZ WGN 2011-08-07 23:59:59.997 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997 CZ BHU 2011-08-08 00:00:00.000 9999-12-31 23:59:59.000
DE WGN 2011-08-31 23:59:59.997 2011-02-14 00:00:00.000 2011-02-13 23:59:59.997 DE BHU 2011-09-01 00:00:00.000 9999-12-31 23:59:59.000
Теперь, если бы я мог получить вычисленное значение в TransferToBHU в значение обновления, это именно то, что я хочу.
Самое простое решение - обновить значения хранилища 'WGN' на основе значений 'BHU'. Тем не менее, лучшее будет обновляться на основе получения двух последних дат ActiveFrom для данного CountryCode.
Любое решение приемлемо, хотя, если кто-то предоставит решение, которое работает в указанные даты, он получит принятый ответ.
Заранее спасибо.