首页 > 解决方案 > 两个连续行之间的差异(按 ID)

问题描述

我试图通过 ID 获得两个连续行之间的差异,这两个日期位于不同的列中。我认为它必须与 PARTITION BY 结合获得 MAX 2 desc,然后抓住 MAX 1 asc ......虽然对逻辑有点困惑。这是一个示例。

ID  Start_date  End_date
1   1/1/2017    2/8/2017
1   2/10/2017   3/8/2017
1   3/21/2017   3/29/2017
1   4/11/2017   5/12/2017
2   4/2/2016    4/3/2016
2   4/6/2016    5/11/2016
3   4/25/2016   4/30/2016
3   5/25/2016   6/29/2016
3   7/13/2016   7/15/2016
3   7/18/2016   8/24/2016

ID  Start_date  End_date    new
1   1/1/2017    2/8/2017    NULL
1   2/10/2017   3/8/2017    2
1   3/21/2017   3/29/2017   13
1   4/11/2017   5/12/2017   13
2   4/2/2016    4/3/2016    NULL
2   4/6/2016    5/11/2016   3
3   4/25/2016   4/30/2016   NULL
3   5/25/2016   6/29/2016   25
3   7/13/2016   7/15/2016   14
3   7/18/2016   8/24/2016   3

标签: sqlsql-servertsql

解决方案


使用lag函数获取先前的值并在datediff.

select t.*,datediff(day,lag(end_date) over(partition by id order by start_date),start_date) as diff
from tbl t

LAG 提供对位于当前行之前的给定物理偏移量的行的访问。在 SELECT 语句中使用此分析函数将当前行中的值与前一行中的值进行比较。


推荐阅读