我有一个如下的事实表,如何找到在给定时间内其值下降的实体?
例如,选择在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
之间
实体ID 12的值减少了两次:
entity_id | value | date | old_value
12 | 16 | 2014-01-03 | 25
12 | 15 | 2014-01-04 | 16
答案 0 :(得分:1)
我认为您想要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'
。
答案 1 :(得分:0)
MySQL中的范围仅为<或>或=,您可以根据需要组合它们,但仍可以使用%% date%检索所需的相似日期
答案 2 :(得分:0)
假设您的表名为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