sql server—用于查找列的行值之间的最小差异的sql查询

o2gm4chl  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(386)

我想找出每个身份证的年份之间的最小差异。例如,
我有以下数据:

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

我想要这个输出:

ID    year
1      0
2      1
3      0
cdmah0mi

cdmah0mi1#

你需要一个 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;

在线演示
4ngedf3f

4ngedf3f2#

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

这是一把小提琴。

相关问题