我有这样的表
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
谢谢你的回答
答案 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;