Я работаю с SQL Server уже 4 месяца, и большая часть моей работы заключается в создании Datawarehouse для моей компании. Обычно мы используем метод звездообразной схемы, но поскольку измерений слишком много, я обычно запускаю запросы UPDATE, чтобы заполнить столбцы измерений позже. После повторного тестирования моих запросов я натолкнулся на причудливую ошибку, которую абсолютно не могу объяснить, и это меня очень пугает. В моих данных был столбец Registered_on
с типом DateTime. Я создал измерение под названием HOUR с 24 строками, по одному на каждый час дня и int для соответствия. Итак, первая строка полночь и содержит столбец с 0.
Когда я запустил запрос
SELECT HourDimension.Hour
,DATEPART(Hour, AdmissionLogs.Registered_on)
FROM FactTable
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
INNER JOIN HourDimension ON HourDimension.HourNumber = DATEPART(Hour, AdmissionLogs.Registered_on)
Все идеально соответствовало, согласно этому изображению.
![enter image description here](https://i.stack.imgur.com/8OWNl.png)
Таким образом, я выполнил запрос на обновление как:
UPDATE FactTable
SET FactTable.IdfHourDimension = HourDimension.IdfHourDimension
FROM FactTable
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
INNER JOIN HourDimension ON HourDimension.HourNumber = DATEPART(Hour, AdmissionLogs.Registered_on)
И после просмотра результатов таблицы фактов с помощью:
SELECT HourDimension.Hour
,HourDimension.HourNumber
,DatePart(Hour, AdmissionLogs.Registered_on)
FROM FactTable
INNER JOIN HourDimension ON HourDimension.IdfHourDimension = FactTable.IdfHourDimension
INNER JOIN AdmissionLogs ON AdmissionLogs.ID = FactTable.LogID
Я получил это:
![enter image description here](https://i.stack.imgur.com/DVks4.png)
Часы АБСОЛЮТНО не совпадают! Я не знаю, что происходит, но я серьезно сомневаюсь во всем, что знаю.