【问题标题】:SQL Select - Date Comparing In Complex QuerySQL Select - 复杂查询中的日期比较
【发布时间】:2015-03-15 22:47:46
【问题描述】:

我想获取日期最接近当前时间的所有行。 为此,我首先从所有行中获取最接近当前日期的第一个日期,然后获取日期与最接近日期相同的所有行。 希望这是有道理的..

就是这样:

SELECT * 
  FROM Events 
 WHERE StartDate = '(SELECT StartDate 
                       FROM Events 
                      WHERE StartDate >= CURDATE() 
                      ORDER 
                         BY StartDate DESC 
                      LIMIT 1)';

无论如何,查询都不起作用。我知道子查询确实有效:

SELECT * FROM Events WHERE StartDate = SELECT StartDate FROM Events WHERE StartDate >= CURDATE() ORDER BY StartDate DESC LIMIT 1

但是当将它们组合在一起时,它不会运行。 我怀疑这可能是子查询结果的格式问题,我尝试使用 sql 函数对其进行格式化,但也没有用。

我也无权访问调试错误,因此我无法真正看到问题所在。

你能帮忙吗? 非常感谢!

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • 您确定日期只是日期,而不是日期+时间吗?如下所示,去掉引号并留下括号。毕竟这是一个事件。

标签: mysql sql date select


【解决方案1】:

您不应该通过DESC 订购来找到最近的。你需要升序:

SELECT * FROM Events WHERE StartDate = (
    SELECT StartDate FROM Events WHERE StartDate >= CURDATE()
    ORDER BY StartDate LIMIT 1
)

或者你可以:

SELECT * FROM Events WHERE StartDate = (
    SELECT MIN(StartDate) FROM Events WHERE StartDate >= CURDATE()
)

【讨论】:

  • 我是从网上拿的,没有仔细检查。先生,您真是个十足的坏蛋!谢谢!
【解决方案2】:

您的子查询是一个字符串。删除引号。

【讨论】:

  • 据我所知,日期使用引号。反正我都试过了,还是不行。
  • 您删除了引号括号。
猜你喜欢
  • 1970-01-01
  • 2013-09-16
  • 2014-12-25
  • 2015-07-17
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 2021-11-06
相关资源
最近更新 更多