2012-10-11 62 views
0

在我的Auctions表內,我有一個名爲Auction_StartDate的列。一行的值是這樣的:2012-10-27 13:45:30在MySQL中的下一個最接近的日期和時間

我需要一個查詢,將返回下一個最接近的日期和時間之後。因此,如果下一個Auction_StartDate爲2012-10-27 18:30:00,則應在日期變爲2012-10-28之前返回。

+0

你只需要下一個最近的日期?或者您是否需要具有下一個最近日期的行的ID?另外,你是否說你只想在同一個日曆日的結果?或者如果下一個最接近的是「2012-10-28 05:00:00」,那可以接受嗎? – liquorvicar

+0

是的,隨着時間的推移,我需要它。 – Alec

+0

這不是我所問的。您是否需要下一個最近日期的行的ID?下一個最近的日期是否必須在同一日曆日? – liquorvicar

回答

0

可能是這樣一個幫助

SELECT DATE(Auction_StartDate) closestDate 
    FROM Auctions 
    WHERE DATE(Auction_StartDate) > '2012-10-27' 
    order by Auction_StartDate ASC 
    limit 1 
+1

您需要添加'ORDER BY closestDate ASC',這會發生[點擊此處](http://sqlfiddle.com/#!2/933ae/1) –

+0

@JohnWoo:我們需要關閉日期和DESC永遠不會給我們最接近的,我認爲它必須是ASC :) –

+0

我需要包含在結果中的時間。 – Alec

1

如果不使用LIMIT and ORDER BY子句,則可以使用MIN查找最接近的值。

SELECT MIN(DATE(Auction_StartDate)) closestDate 
FROM Auctions 
WHERE DATE(Auction_StartDate) > '2012-10-27' 

SQLfiddle Demo

+0

而不是MIN函數,我們可以使用LIMIT優化查詢 –

+0

@Ravi嘗試修復您的查詢:)它可以返回無效的日期.. –

+0

感謝您糾正約翰,我檢查了你的小提琴,現在看到你已經安排在ASC訂單,所以在你的情況下,它完美的作品:) –

1

如果你的意思是每一行做到這一點,試試這個:

SELECT a1.id, 
    (SELECT MIN(a2.Auction_StartDate) 
    FROM Auctions a2 
    WHERE a2.Auction_StartDate > a1.Auction_StartDate) AS nextStartDate 
FROM Auctions a1 
0
SELECT (case when Hour(StartDate)>=12 then DATE_ADD(StartDate, 
        INTERVAL 1 DAY) else StartDate end) as 'date' FROM table 
    ------------------------------ 
    pleaes add your column name where is static date : 
    est on : http://sqlfiddle.com/#!2/b8435/19 

    SELECT (case when Hour(StartDate)>=12 then 
     DATE_FORMAT(DATE_ADD(StartDate ,INTERVAL 1 DAY), '%Y-%m-%d')     
     else DATE_FORMAT(StartDate , '%Y-%m-%d') end) as 'date' from tabel 
相關問題