У меня есть таблица с постоянно обновляемыми данными погоды за 30 секунд. Данные с моего датчика погоды в конечном итоге попадают на SQL Server с отметкой времени в формате UTC.
Я хочу иметь возможность суммировать эти высокочастотные данные в таблице DailySummary
, однако я хочу, чтобы дни представляли мой местный часовой пояс (центральное стандартное время), а не UTC. Я добавил вычисляемый столбец в свою таблицу высокой частоты для местного времени, чтобы помочь в этом:
((([TmStamp] AT TIME ZONE 'UTC') AT TIME ZONE 'Central Standard Time'))
В нынешнем виде я не могу сделать этот столбец PERSISTED
из-за его недетерминированности. Я также согласен с переходом на летнее время, которое дает мне 23-часовой рабочий день весной и 25-часовой рабочий день осенью.
В моем кратком представлении:
SELECT
DATEADD(DAY, 0, DATEDIFF(day, 0, TmStamp_Local)) AS CalDate,
MAX(AirTemp_Avg) AS HighTemp,
MIN(AirTemp_Avg) AS LowTemp,
AVG(AirTemp_Avg) AS AvgTemp
FROM
dbo.DL_MAIN_Weather
GROUP BY
DATEADD(DAY, 0, DATEDIFF(day, 0, TmStamp_Local))
Это работает, но относительно медленно (я добавлю больше столбцов в это представление в конце концов). Поскольку исторические данные о погоде не изменятся (если только мне не нужно вручную корректировать значение), кажется немного неэффективным пересчитывать эту таблицу каждый раз, когда мне это нужно.
Любые идеи о том, как ускорить его и, возможно, проиндексировать?
Я использую Microsoft SQL Server 2017.