SQL查询检查在检查之前和之后获取最近的日期

时间:2017-09-06 08:21:11

标签: mysql sql

我有这样的表

ID             effective_date                 status
1              2014-12-01                     1
2              2016-11-18                     0 
3              2016-11-25                     1 
4              2017-04-21                     0
5              2017-05-20                     1

当状态1 =有效且0 =无效时 我有一个日期搜索' 2016-12-30'

我怎样才能得到一个date_effective,其活动状态最接近日期搜索? 实际上结果是

ID             effective_date                 status
3              2016-11-25                     1

谢谢你的回答

2 个答案:

答案 0 :(得分:0)

无需太复杂:

SELECT * FROM
  table
WHERE
  effective_date < str_to_date('20161230', '%Y%m%d') AND
  status = 1
ORDER BY 
  effective_date DESC
LIMIT 1

编辑:我不确定为什么Giorgios Betaos会删除他的帖子,因为它似乎是基于所提供的新信息的正确答案:

SELECT * FROM
  table
WHERE
  status = 1
ORDER BY 
  ABS(effective_date - str_to_date('20161230', '%Y%m%d')) ASC
LIMIT 1

我们得到搜索中提供的日期与表格中所有日期之间的绝对差异,并按升序排序。差异最小的那个是最接近被搜索的日期

答案 1 :(得分:0)

按日期差异排序并保留第一条记录:

select *
from mytable
where status = 1
order by abs(datediff(effective_date, date '2016-12-30'))
limit 1;