SQL查询以查找列的行值之间的最小差异

Posted

技术标签:

【中文标题】SQL查询以查找列的行值之间的最小差异【英文标题】:SQL query to find minimum difference between row values of a column 【发布时间】:2020-09-17 23:20:48 【问题描述】:

我正在尝试找出每个 ID 的最小年份差异。例如,

我有这些数据:

ID     year
1      2001
1      2001
2      2003
2      2004
2      2010
3      2000

我想要这个输出:

ID    year
1      0
2      1
3      0

【问题讨论】:

您尝试解决什么问题? 【参考方案1】:

你可以使用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;

Here 是一个 dbfiddle。

【讨论】:

【参考方案2】:

您可以使用LEFT JOIN

SELECT Id,
       ISNULL(MIN(Def), 0) [Year]
FROM
(
  SELECT T.Id,
         TT.Year - T.Year Def
  FROM Data T
  LEFT JOIN Data TT ON T.Id = TT.Id AND T.Year < TT.Year
) T
GROUP BY Id;

Online Demo

【讨论】:

以上是关于SQL查询以查找列的行值之间的最小差异的主要内容,如果未能解决你的问题,请参考以下文章

Sql查询以查找两个给定日期之间的视图百分比差异

动态 SQL 透视查询中的分组和聚合函数

查询以返回在所有行中对于一列的每个不同值具有相同值的行值

我正在尝试提高查找两个表之间差异的 Oracle SQL 的性能

SQL查询选择年份在两个日期之间的行

如何在 Oracle SQL 中查找最具体的匹配行