我想找出每个身份证的年份之间的最小差异。例如,我有以下数据:
ID year 1 2001 1 2001 2 2003 2 2004 2 2010 3 2000
我想要这个输出:
ID year 1 0 2 1 3 0
cdmah0mi1#
你需要一个 LEFT JOIN ```SELECT Id,ISNULL(MIN(Def), 0) [Year]FROM(SELECT T.Id,TT.Year - T.Year DefFROM Data TLEFT JOIN Data TT ON T.Id = TT.Id AND T.Year < TT.Year) TGROUP BY Id;
LEFT JOIN
在线演示
4ngedf3f2#
你可以用 lag() :
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;
这是一把小提琴。
2条答案
按热度按时间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;
4ngedf3f2#
你可以用
lag()
:这是一把小提琴。