【问题标题】:SQL query to find minimum difference between row values of a columnSQL查询以查找列的行值之间的最小差异
【发布时间】: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

【问题讨论】:

  • 您尝试解决什么问题?

标签: sql sql-server difference minimum


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多