Intereting Posts
Выполнение Immediate в хранимой процедуре продолжает давать недостаточную ошибку priviliges PostgreSQL: расширение частотной таблицы Когда использовать SQL-запросы по сравнению со стандартным соединением? Выбрав один флажок в ячейках с флагом из цикла checkboxlist SELECT из двух одинаковых таблиц с пересечением SQL для поиска повторяющихся записей (внутри группы) Использование функции sql DATEADD в java как решить system.data.sqlclient.sqlexception (0x80131904) ошибка Сравнение дат в Oracle SQL Регулярное выражение для анализа параметров SQL Могу ли я получить уникальный TIMESTAMP для каждой записи в MySQL Присоединитесь к двум таблицам, где таблица A имеет значение даты и должна найти следующую дату в B ниже даты в A MySQL Выберите запрос для извлечения базы записей по значениям списка Обновить поле существующей таблицы с помощью автоматической приращения логики Как получить процент от общего числа, когда запрос имеет GROUP BY?

Определение тенденции с помощью SQL-запроса

У меня есть таблица (назовем ее Data) с набором идентификаторов объектов, числовыми значениями и датами. Я хотел бы идентифицировать объекты, значения которых имели положительную тенденцию за последние X минут (скажем, час).

Пример данных:

entity_id | value | date 1234 | 15 | 2014-01-02 11:30:00 5689 | 21 | 2014-01-02 11:31:00 1234 | 16 | 2014-01-02 11:31:00 

Я пробовал искать похожие вопросы, но не нашел ничего, что помогает, к сожалению …

Вы вдохновили меня пойти и реализовать линейную регрессию в SQL Server. Это может быть изменено для MySQL / Oracle / независимо от того, что без особых проблем. Это математически лучший способ определить тренд за час для каждого entity_id, и он выберет только те, у кого есть положительная тенденция.

Он реализует формулу для вычисления B1hat, перечисленных здесь: https://en.wikipedia.org/wiki/Regression_analysis#Linear_regression

 create table #temp ( entity_id int, value int, [date] datetime ) insert into #temp (entity_id, value, [date]) values (1,10,'20140102 07:00:00 AM'), (1,20,'20140102 07:15:00 AM'), (1,30,'20140102 07:30:00 AM'), (2,50,'20140102 07:00:00 AM'), (2,20,'20140102 07:47:00 AM'), (3,40,'20140102 07:00:00 AM'), (3,40,'20140102 07:52:00 AM') select entity_id, 1.0*sum((x-xbar)*(y-ybar))/sum((x-xbar)*(x-xbar)) as Beta from ( select entity_id, avg(value) over(partition by entity_id) as ybar, value as y, avg(datediff(second,'20140102 07:00:00 AM',[date])) over(partition by entity_id) as xbar, datediff(second,'20140102 07:00:00 AM',[date]) as x from #temp where [date]>='20140102 07:00:00 AM' and [date]<'20140102 08:00:00 AM' ) as Calcs group by entity_id having 1.0*sum((x-xbar)*(y-ybar))/sum((x-xbar)*(x-xbar))>0