sql - SQL查询查找事实表中的趋势
问题描述
我有一个如下所示的事实表,如何找到在给定时间段内值下降的实体?例如,选择在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
例如,
entity_id 12 值的日期之间减少了两次2014-01-01
:2014-01-04
entity_id | value | date | old_value
12 | 16 | 2014-01-03 | 25
12 | 15 | 2014-01-04 | 16
解决方案
我想你想要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'
特定日期范围。
推荐阅读
- sql - 使用 oracle SQL 连接来自同一列的 2 个值
- python - 如何从失败的 SQLAlchemy 提交中恢复?
- push-notification - 是否可以从 CLI 订阅浏览器通知?
- azure-devops - 如何在 Azure DevOps 中永久删除废弃的拉取请求?
- wordpress - 将所见即所得的自定义 Tinymce 按钮保存在 Wordpress 上的最后输入
- javascript - 需要帮忙!在一个 javascript 函数中工作的代码在另一个函数中不起作用,但两者似乎都已正确格式化
- azure-ad-b2c - azure ad b2c 自定义策略 - 如何在声明中获取用户对象 ID 和电子邮件?
- typescript - Typescript 是否可以为 1-N 个字符串的数组声明泛型类型
- c# - 没有使用'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' asp.net core 3.1找到构造函数
- python - Python正则表达式查找多行