sql - 两个连续行之间的差异(按 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
解决方案
使用该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 语句中使用此分析函数将当前行中的值与前一行中的值进行比较。
推荐阅读
- html - 在 IE11 中,当单击其子元素之一时,焦点事件未在具有显示 flex 的可聚焦父 HTML 元素上触发
- java - 无论使用文字还是新创建的所有字符串的哈希值都是相同的
- flutter - 如何在颤动中制作具有边框半径的文本字段???
- arrays - 如何在 Swift 中合并两个排序数组?
- vba - VBA图表X轴有重复值,不与数据对齐
- primefaces - 如何知道(在支持 bean 中)单击了哪个 p:commandButton?
- python-3.x - Twitter API 仅应用程序身份验证 (Python3)
- python - 输入后脚本停止?
- angularjs - 如何在使用AngularJS动态输入文本框时显示最小值和最大值
- excel - 如何根据两个条件将工作簿中的工作表移动到另外两个打开的(新创建的)工作簿参考下面的代码?