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
我已阅读有关 ABS
和 DATEDIFF
函数的信息,但无法让它们按我的想象工作:
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 中高效的“查找最近的数字或日期”,其中日期/数字列被索引覆盖