查找登录之间最近的时差



我有一个ID和日期的数据库。 这样:

ID       Date
1        2019-12-1
1        2019-10-1
1        2019-09-1
2        2019-12-1
2        2019-10-1
3        2019-12-1

我想编写一个查询,该查询将返回相同 ID 的 2 个日期之间的最小差异,如下所示(假设以月为单位(:

ID       Difference
1            1
2            2

3根本不应该出现在结果中,因为它没有重复条目或出现 3-NULL

您可以使用窗口函数和聚合:

select id, min(datediff(date, lag_date)) diff
from (select id, date, lag(date) over(partition by id oder by date) lag_date from mytable) t
group by id

内部查询检索同一id的上一个date。外部查询按id聚合并计算最小日期差异。

请注意,日期函数高度依赖于数据库,因此计算日期之间差异的语法确实因数据库而异 - 上述解决方案使用 MySQL 语法,其他数据库具有实现相同功能的替代语法。

试试这个。我已经在甲骨文中对此进行了测试。

select A.id,min(MONTHS_BETWEEN(A.date1,B.date1)) from test A join test B on
A.id=B.id and A.date1>B.date1
group by A.id
order by A.id;

如果您使用的是MySQL或SQL Server,您还可以使用DATEDIFF提取月份差异。

最新更新