Запрос к временной таблице с полями даты / времени
Мне нужно написать запрос, чтобы получить следующий вывод, используя функцию временной таблицы в SQL Server 2016.
Таблица клиентов (таблица версий системы)
Id
Name
[period_start] [datetime2](7) GENERATED ALWAYS AS ROW START NOT NULL
[period_end] [datetime2](7) GENERATED ALWAYS AS ROW END NOT NULL
Стол заказов
Id
CustomerId
..
[creation_date] DATETIME default SYSUTCDATETIME()
Вывод: OrderId, ..., имя клиента
Имя клиента должно отражать правильное имя, соответствующее дате заказа
Следующий запрос даст мне необходимый вывод, но мне нужно проверить, является ли это правильным способом выполнения запросов такого типа.
SELECT T.Id, O.Name
FROM Orders T
INNER JOIN (
SELECT *
FROM Customer
FOR SYSTEM_TIME FROM '1900-01-01' TO '9999-12-31 23:59:59.9999999'
) O ON T.CustomerId = O.ID
AND T.creation_date BETWEEN O.period_start AND O.period_end
заранее спасибо
Chaminda.
2 ответа
Решение
Я не вижу в этом ничего плохого, за исключением того, что вложенный запрос не нужен:
SELECT T.Id, O.Name
FROM Orders T
JOIN Customer FOR SYSTEM_TIME FROM '1900-01-01' TO '9999-12-31 23:59:59.9999999' O
ON T.CustomerId = O.ID
WHERE T.creation_date BETWEEN O.period_start AND O.period_end
Похоже, у вас есть посторонние критерии в вашем запросе. Я думаю, что это делает все, что вы просили:
SELECT T.Id, O.Name
FROM Orders T INNER JOIN Customer O
ON T.CustomerId = O.ID