我有一个包含日期列的表。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