Мне нужно запросить таблицу сэмплов, сгруппированных по часам или дням, и получить результат с помощью AVG, Max с датой максимального значения и то же с минимальным значением. Стол будет огромным, поэтому мне нужна лучшая производительность.
Стол:
CREATE TABLE Samples (
[Id] INT IDENTITY (1, 1) NOT NULL,
[AvgValue] FLOAT NULL,
[SampleDate] DATETIME NOT NULL,
[MaxValue] FLOAT NULL,
[DT_MaxValue] DATETIME NULL,
[MinValue] FLOAT NULL,
[DT_MinValue] DATETIME NULL
);
Строки в таблице:
Id AvgValue SampleDate MaxValue DT_MaxValue MinValue DT_MinValue
1 10 2018-01-01T01:00:00 15 2018-01-01T01:02:00 9 2018-01-01T01:08:00
2 15 2018-01-01T01:15:00 18 2018-01-01T01:22:00 10 2018-01-01T01:16:00
3 17 2018-01-01T02:15:00 19 2018-01-01T02:27:00 12 2018-01-01T02:17:00
4 20 2018-01-01T02:30:00 23 2018-01-01T02:42:00 14 2018-01-01T02:34:00
5 22 2018-01-01T02:45:00 24 2018-01-01T02:52:00 18 2018-01-01T02:46:00
6 25 2018-01-01T03:00:00 27 2018-01-01T03:14:00 22 2018-01-01T03:01:00
Ожидаемый результат:
AvgValue SampleDate MaxValue DT_MaxValue MinValue DT_MinValue
12,5 2018-01-01T01:00:00 18 2018-01-01T01:22:00 9 2018-01-01T01:08:00
19,66 2018-01-01T02:00:00 24 2018-01-01T02:52:00 12 2018-01-01T02:17:00
25 2018-01-01T03:00:00 27 2018-01-01T03:14:00 22 2018-01-01T03:01:00
Сложнее всего связать дату с максимальным и минимальным значениями. Я не могу изменить таблицу, но создание представления возможно.
Обновление
Данные поступают из удаленной системы, которая производит выборку данных каждые несколько секунд и с интервалом в 15 минут вычисляет среднее значение, максимальное прочитанное значение (с датой и временем, когда оно было взято) и минимальное значение (с датой и временем) для интервала. , «SampleDate» - это дата и время начала интервала.
Мне нужно запросить таблицу и группу с более длинными интервалами (час, день, месяц), но сохранить максимальное значение и его время, а минимальное - его время.
Под «группой по часам» я подразумеваю необходимость получать значения для каждого часа каждой даты, то есть «2018-01-01T01: 00: 00» отличается от «2018-01-01T01: 00: 00"
Надеюсь, это поможет прояснить вопрос