Спасибо большое.
В итоге вышел из ситуации несколькими таблицами и двумя кнопками, со временем допилю,чтобы сама обновлялась каждую неделю.
Может кому будет полезно.
Описание:
Таблица показаний температурных датчиков за период. Показаний датчика несколько в час, выбрать показания ночью с 00 до 01 и днём с 12 до 13.
trends_data - основная таблица sql
variables_data - связанная таблица с описанием поля
ID - уникальный идентификатор, он же id переменной
Description - описание переменной (в итоге не понадобилось)
Value - показания
Timestamp - дата-время показаний
Пример заполнения одной таблицы:
var
aQuery_1:string;
begin
aQuery_1 := 'WITH RankedData_1 (Date_1, Value_1, ID_1, Descr_1, Time_1, Rank_1) AS' // декларируем временную таблицу
+'(' // выборка из БД
+'SELECT '
+' CAST(Timestamp as date) AS Date_1, ' // извлекаем дату
+' convert(numeric(10,2), trends_data.Value) as Value_1, ' // приводим показания к формату два знака после запятой
+' trends_data.ID as ID_1, '
+'variables_data.Description AS Descr_1, '
+' FORMAT(Timestamp ,''HH:mm:ss'') AS Time_1, ' // извлекаем время
+' ROW_NUMBER() OVER (PARTITION BY CAST (Timestamp as date), trends_data.ID ORDER BY FORMAT(Timestamp ,''HH:mm:ss'')) AS Rank_1 ' // подсчитываем количество показаний в час
+' FROM trends_data join variables_data on trends_data.ID = variables_data.ID ' // связываем таблицы
+' WHERE trends_data.ID in (1619) AND (FORMAT(Timestamp ,''HH:mm:ss'') BETWEEN ''12:00:00'' AND ''13:00:00'') ' // фильтруем по ID датчика и времени получения показаний
+' )'
+' SELECT top (30) Date_1, Value_1' // добавляем в итоговую таблицу необходимые данные - последние 30
+' FROM RankedData_1 '
+' WHERE Rank_1 = 1 ' // оставляем первое значение часа
+' ORDER BY Date_1 desc, ID_1 desc, Time_1 desc';
Table5.RunSQL(aQuery_1, tsSaveFixRow);
Text225.Visible := True;
Text225.Text := 'Температура днём';
end.