Как получить из таблицы только те значения, в которых за последний 2 часа цена выросла в Х раз или на Y.?

Есть таблица postgresql с данными

-id
    -name
    -datetime
    -count
    -price


Хочу вывести только те значения, в которых за последний 2 часа цена выросла в Х раз или на Y.
пока что только так делаю

select * from table where datetime >now()-INTERVAL '2 hours'


Пример

1  Tovar1   29.10.2017 11:12:13   3    10
2  Tovar2   29.10.2017 11:10:12   0    15
3  Tovar1   29.10.2017 12:00:00   100  10

то-есть количество товара1 стало 100, а было менее чем 2 часа 3. Нужно вывести в ответе Товар1 (ну если ещё во-сколько раз выросло количество-тоже было бы хорошо)

Как такое сделать?
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
Можно попробовать с помощью case и оконных функций LAG (предыдущее значение).
coef - коэффициент уменьшения, защита от 0
pr = 1 там где за последние 2 часа увеличилось в X раз

select *
from (
select id_field, n_field, v_field, dt_field, 

(case when dt_field > now()-INTERVAL '2 hours'  and 
     v_field > (LAG(v_field,1,v_field) OVER (partition by n_field order by dt_field)) * X then 1 else 0 end) as pr,  

v_field/(case when (LAG(v_field,1,v_field) OVER (partition by n_field order by dt_field)) = 0 then 1 
else  LAG(v_field,1,v_field) OVER (partition by n_field order by dt_field)
end) as coef
from table ) a
where a.pr = 1


UPD: с интервалом я там намудрил, там тоже предыдущее значение даты надо получать через LAG вместо now
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы