我有一个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提取月份差异。