首页 > 解决方案 > 仅返回一列中的日期与另一列中的日期最接近的行?

问题描述

我正在处理一个查询,但它返回了一些重复的值,我只需要返回一列中的日期最接近另一列中的日期的行。

我的查询看起来像这样:

SELECT p.Id, r.ReferralDate, s.SupervisionDate
FROM person p
INNER JOIN referral r on r.PersonId = p.Id 
INNER JOIN supervision s on s.PersonId = p.Id

它返回如下内容:

ID 监督日期 推荐日期
123 2015-09-30 2015-08-30
123 2020-02-30 2015-08-30
123 2020-06-30 2015-08-30
456 2010-06-30 2010-07-30
456 2005-06-30 2010-07-30

如何编写返回最接近推荐日期的监督日期的查询?所以最终的输出看起来像这样:

ID 监督日期 推荐日期
123 2015-09-30 2015-08-30
456 2010-06-30 2010-07-30

标签: sqlsql-servertsql

解决方案


另一种方式:

select ID, SUP from 
( SELECT 
   p.Id 'ID', 
   r.ReferralDate 'REF', 
   s.SupervisionDate 'SUP',
   min(julianday(s.SupervisionDate) - julianday(r.ReferralDate) ) 'diff'

FROM person p
INNER JOIN referral r on r.PersonId = p.Id 
INNER JOIN supervision s on s.PersonId = p.Id

GROUP BY p.ID
)

这将根据要求返回 ID 和 SupervisionDate。


推荐阅读