SQL-запрос для поиска тренда в таблице фактов - PullRequest
0 голосов
/ 25 октября 2018

У меня есть таблица фактов, как показано ниже, как найти сущности, значения которых уменьшились за определенный период времени?Например, выберите сущности и значения, которые уменьшились от 2014-01-01 до 2014-01-04

entity_id | value | date
12        | 15    | 2014-01-01 
56        | 21    | 2014-01-04
12        | 15    | 2014-01-04 
56        | 21    | 2014-01-02 
12        | 25    | 2014-01-02 
12        | 16    | 2014-01-03 

Например, между датами 2014-01-01 до 2014-01-04 значение entity_id 12 уменьшилось вдвое:

entity_id | value | date       | old_value
12        | 16    | 2014-01-03 | 25
12        | 15    | 2014-01-04 | 16

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Диапазон в MySQL - только <или> или =, вы можете комбинировать их как хотите, но вы все равно можете использовать LIke% date% для получения той даты, которую вы хотите

0 голосов
/ 25 октября 2018

Предположим, ваш стол называется entity

SELECT e.entity_id, e.value as old_value, e2.value as new_value, v2.date
FROM entity e
JOIN entity e2 ON v.entity_id = v2.entity_id
AND e.date < e2.date
AND e.value > e2.value
GROUP BY e.date
0 голосов
/ 25 октября 2018

Я думаю, что вы хотите lag():

select t.*
from (select t.*, lag(value) over (partition by entity_id order by date) as prev_value
      from t
     ) t
where prev_value > value;

Вы можете добавить and date >= '2014-01-01' and date <= '2014-01-04' для определенного диапазона дат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...