MySQL:查找过去或将来的最近日期

Posted

技术标签:

【中文标题】MySQL:查找过去或将来的最近日期【英文标题】:MySQL: Finding the nearest date in past or future 【发布时间】:2014-05-14 18:59:28 【问题描述】:

下面的子查询将返回最近的过去日期,我想调整它以便找到过去或未来最近的日期。

SELECT date,

    (SELECT value
     FROM `users check-ins` as c
     WHERE c.date < p.date AND `userid` = '$userid'
     ORDER BY c.date DESC
     LIMIT 1) as weight

FROM `users photos` as p
WHERE `userid` = '$userid'
ORDER BY date ASC

我已阅读有关 ABSDATEDIFF 函数的信息,但无法让它们按我的想象工作:

SELECT date,

    (SELECT value
     FROM `users check-ins` as c
     WHERE `userid` = '$userid'
     ORDER BY ABS(DATEDIFF(c.date, p.date)) DESC
     LIMIT 1) as weight

FROM `users photos` as p
WHERE `userid` = '$userid'
ORDER BY DATE ASC

所以子查询应该从最接近p.date的行返回value

编辑:

这是SQLfiddle。

【问题讨论】:

考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集 添加ABS(DATEDIFF(c.date, p.date)) 作为临时返回的值之一可能吗?所以你实际上可以看到发生了什么? 我添加了一个 SQLFiddle。 @Zoredache 它的返回方式不同,是的。但不确定如何使用它来获取“价值” 【参考方案1】:

您需要在子查询中通过asc 而不是desc 订购:

SELECT date,

    (SELECT value
     FROM `users check-ins` as c
     WHERE `userid` = '$userid'
     ORDER BY ABS(DATEDIFF(c.date, p.date)) ASC
     LIMIT 1) as weight

FROM `users photos` as p
WHERE `userid` = '$userid'
ORDER BY DATE ASC

【讨论】:

以上是关于MySQL:查找过去或将来的最近日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL 中高效的“查找最近的数字或日期”,其中日期/数字列被索引覆盖

如何在 MySQL 中选择最近 30 天的日期?

对于特定的日期时间,在 [关闭] 之前和之后查找日期时间最近的记录

怎样查看浏览历史记录

尝试查找 Oracle SQL 中状态字段更改的最近日期

如何查找最近两个月未访问的文件列表?