【发布时间】:2021-08-07 17:44:00
【问题描述】:
我有一个存储里程碑(id、描述、日期)的表,给定一些事件日期,我想找到最接近该日期的里程碑。
我正在使用 Spring Data JPA,但我似乎不知道该怎么做。根据可用的functions,似乎没有任何本机可用于查找最近的日期。目前我想出的最好的想法是使用原始 sql 类似的东西
select id, description, date, date-'2021-05-18' as datediff from milestones order by datediff desc limit 1
然后我会在我的 repo 上有一个函数,比如
@Query("select id, description, date, date - :eventDate as datediff from milestones order by datediff desc limit 1")
List<Milestones> findClosest(Date eventDate );
我对这种方法的主要担忧是,我必须依靠 DBMS 特定的函数来执行日期差异并只选择第一个结果。由于这似乎是一个常见问题,我想知道是否有更好的与 DBMS 无关的替代方案可用。
注意事项
- 最近日期可以在活动日期之前或之后
- 我正在使用 postgres,但理想的解决方案应该适用于任何 DBMS
【问题讨论】:
标签: java sql spring-boot spring-data-jpa