SQL查询,查找列的行值之间的最小差值。

问题描述 投票:0回答:1

我试图找到每个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个回答
1
投票

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

在线演示


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;

这里 是一个db<>提琴。

© www.soinside.com 2019 - 2024. All rights reserved.