sql - SQL查询以查找列的行值之间的最小差异
问题描述
我试图找到每个 ID 的最小年差。例如,
我有这个数据:
ID year
1 2001
1 2001
2 2003
2 2004
2 2010
3 2000
我想要这个输出:
ID year
1 0
2 1
3 0
解决方案
您可以使用lag()
:
select id, coalesce(min(year - prev_year), 0)
from (select t.*, lag(year) over (partition by id order by year) as prev_year
from t
) t
group by id;
这是一个 db<>fiddle。
推荐阅读
- python - 如何立即打破while循环
- postgresql - PostgreSQL | 如何在 Sql Inserts 中属性索引更新时间
- ios - 如何将 vararg 参数从 Kotlin 通用代码传递给 iOS 函数?
- c++ - 创建带有和不带有 new 关键字的 C++ 对象
- java - 使用@Min(0) 验证整数遇到 NumberFormatException
- javascript - 如何计算jQuery中的触发器数量
- android - 注释不能用作注释参数
- javascript - 仅从 JavaScript 中的对象数组中获取唯一数据
- php - Laravel `has` 使用父列值的关系计数
- python - Pandas Dataframe:使用 idxmax() 查找每列的最大值索引