2017-09-06 59 views
0

後,我有表像這樣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 

感謝您的回答

+0

@SebastianBrosch不喜歡這個,這個職位只檢查最後periode,如何檢查週期前後? – Drajad

+0

鏈接答案的第一個解決方案(42 upvotes)是解決方案。你必須編輯這一點(提示'LIMIT'),但它應該工作。 –

+0

好的,謝謝你提供的所有解決方案和信息。 我現在點了 – Drajad

回答

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 

我們得到搜索中提供的日期和表中所有日期之間的絕對差異,並按升序排列。具有最小差的一個是那麼最近的日期是什麼正在搜索

+0

它唯一的檢查後期,那麼期間過後怎麼樣?我的意思是我需要檢查之前和之後的時間 – Drajad

+0

據此編輯..信貸應該去Giorgios Betaos,但誰最先提出這個解決方案。 Giorgios,可能會取消刪除您的帖子? –

0

排序按日期的差異,並保持第一的記錄:

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