У меня есть таблица с первичным ключом (bigint), datetime, value, foreignKey, который содержит 100 000 строк. Я хочу иметь возможность получить строку для переменного временного интервала. Например.Выбирать строки на основе каждого n-го интервала времени
Select Timestamp, value from myTable where configID=3
AND{most recent for 15 min interval}
У меня есть запрос КТР, который возвращает несколько строк для интервала интервала
WITH Time_Interval(timestamp, value, minutes)
AS
(
Select timestamp, value, DatePart(Minute, Timestamp) from myTable
Where Timestamp >= '12/01/2012' and Timestamp <= 'Jan 10, 2013' and
ConfigID = 435 and (DatePart(Minute, Timestamp) % 15) = 0
)
Select Timestamp, value, minutes from Time_Interval
group by minutes, value, timestamp
order by Timestamp
, такие как:
2012-12-19 18:15:22.040 6.98 15
2012-12-19 18:15:29.887 6.98 15
2012-12-19 18:15:33.480 7.02 15
2012-12-19 18:15:49.370 7.01 15
2012-12-19 18:30:41.920 6.95 30
2012-12-19 18:30:52.437 6.93 30
2012-12-19 19:15:18.467 7.13 15
2012-12-19 19:15:34.250 7.11 15
2012-12-19 19:15:49.813 7.12 15
Но, как можно видеть, есть 4 за 1 15 мин интервал, 2 для следующего интервала и т. д. Хуже, Если данные не были получены при точной отметке времени 15 минут, тогда значения не будет.
То, что я хочу, является самым последним значением для пятнадцатиминутного интервала ... если если только данные для этой интервала произошли через 1 секунду после начала интервала.
Я думал о Lead/over, но снова ... строки не упорядочены таким образом. Первичный ключ - это bigInt и представляет собой кластерный индекс. Столбец timstamp и столбцы ConfigID индексируются. Вышеуказанный запрос возвращает 4583 строки за секунду.
Спасибо за любую помощь.
Это, кажется, ответ, который я искал. Хотя я не уверен, как лучше всего реализовать его, если интервал изменяется от 15 минут до 5 или 1 или даже до 6 часов. Мне придется изучить его еще немного. – MtnManChris
Если вам нужно, чтобы интервал был переменным, затем динамически загружайте Interval_Helper с каждой минутой дня (1440 записей) и динамически настраивайте назначение минуты_группы на основе нужной вам группы интервалов. Вам также потребуется настроить соединение DATEPART на минутном столбце, чтобы также включить умножение компонента HOUR на 60 плюс компонент MINUTE метки времени. –
Rob, То, что я закончил, создало пользовательскую функцию, которая в основном избавилась от соединения с Interval_Helper. Таким образом, строка «, B.minute_group стала« dbo.fGetTimeGroup (@tInterval, A. [Timestamp]) как «time_group». – MtnManChris