我有一個包含日期列的表。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。
任何幫助是非常讚賞:)
我有一個包含日期列的表。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。
任何幫助是非常讚賞:)
假設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;
aww,你的更好 – 2013-05-10 17:59:45
謝謝pilcrow!一直試圖找出這一點,堆棧溢出的第一篇文章在5分鐘內回答:) – 2013-05-10 18:13:09
@IanT,不客氣。請務必在未來回復更多問答! :) – pilcrow 2013-05-10 18:20:43
喜歡的東西:
SELECT id, date, ....
FROM tbl
WHERE date <= [your date YYYY-MM-DD HH:MM:SS]
ORDER BY date DESC
LIMIT 1
那不行: OP想要「最近」的時間戳到期望的日期,而不是最近的時間戳在期望的日期之前。 – pilcrow 2013-05-10 18:13:33
SELECT *
FROM `table`
ORDER BY ABS(DATEDIFF(`date`, (DATE_SUB(NOW(), INTERVAL X DAY)))) ASC
LIMIT 1
你可以使用between語句'WHERE date BETWEEN x ... y' – Matthew 2013-05-10 17:52:27
@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
@Barranka The在那篇文章中,我只能用'between'看到的問題是作者不明白日期是如何工作的。 – Matthew 2013-05-10 21:03:08