2013-05-10 69 views
1

我有一個包含日期列的表。MySQL SELECT WHERE DATE約爲X天前

表格數據通過cron作業以不規則間隔插入,而不是每天插入。

我想只選擇最接近X天前的行。

因此,例如,如果它的6月30日和6月25日沒有條目,我希望它能夠在6月26日或24日(以5天前最新和最近的時間爲準)在26日或24日沒有條目,然後查找27日或23日等...

日期存儲爲YYYY-MM-DD HH:MM:SS。

任何幫助是非常讚賞:)

+0

你可以使用between語句'WHERE date BETWEEN x ... y' – Matthew 2013-05-10 17:52:27

+0

@Matthew在我收到反饋之前,我發佈了一個答案,反對在DATE,DATETIME和TIMESTAMP列上使用BETWEEN。我建議你閱讀這篇文章:http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx – Barranka 2013-05-10 18:15:13

+0

@Barranka The在那篇文章中,我只能用'between'看到的問題是作者不明白日期是如何工作的。 – Matthew 2013-05-10 21:03:08

回答

1

假設TIMESTAMP列insertion_ts?必將給您想要的日期或時間戳:

SELECT * 
    FROM tbl 
ORDER BY 
     -- We want the closest insertion_ts to our target date ... 
     ABS(TIMESTAMPDIFF(SECOND, ?, insertion_ts)) ASC, 
     -- ... and will favor the more recent in the unlikely event of a tie 
     TIMESTAMPDIFF(SECOND, ?, insertion_ts) DESC 
    LIMIT 1; 
+0

aww,你的更好 – 2013-05-10 17:59:45

+0

謝謝pilcrow!一直試圖找出這一點,堆棧溢出的第一篇文章在5分鐘內回答:) – 2013-05-10 18:13:09

+0

@IanT,不客氣。請務必在未來回復更多問答! :) – pilcrow 2013-05-10 18:20:43

0

喜歡的東西:

SELECT id, date, .... 
FROM  tbl 
WHERE date <= [your date YYYY-MM-DD HH:MM:SS] 
ORDER BY date DESC 
LIMIT 1 
+0

那不行: OP想要「最近」的時間戳到期望的日期,而不是最近的時間戳在期望的日期之前。 – pilcrow 2013-05-10 18:13:33

0
SELECT * 
FROM `table` 
ORDER BY ABS(DATEDIFF(`date`, (DATE_SUB(NOW(), INTERVAL X DAY)))) ASC 
LIMIT 1