【问题标题】:MySQL ORDER BY combining two dates closest to todayMySQL ORDER BY 组合最接近今天的两个日期
【发布时间】:2016-05-13 23:34:37
【问题描述】:

我有一张桌子

...         | reservation_from         | reservation_to         | ...
1           | 2016-05-13 10:00:00      | 2016-05-21 10:00:00    | ...
2           | 2016-05-13 20:00:00      | 2016-06-29 14:00:00    | ...
3           | 2016-05-01 10:00:00      | 2016-05-13 16:00:00    | ...

现在我必须订购并预订离今天最近的一天。

例如现在是 2016-05-13,所以无论预订是要开始还是要结束,我都必须得到最接近当前时间的结果。我想这样订购

...         | reservation_from         | reservation_to         | ...
1           | 2016-05-13 10:00:00      | 2016-05-21 10:00:00    | ...
2           | 2016-05-01 10:00:00      | 2016-05-13 16:00:00    | ...
3           | 2016-05-13 20:00:00      | 2016-06-29 14:00:00    | ...

如您所见,第二个结果 reservation_from 是 05-01 但它的 reservation_to 小于第三个 reservation_from

我不知道我是否清楚这个问题,如果没有,请评论它我应该详细说明什么。

【问题讨论】:

  • 除非你是时间旅行者,否则今天是 2016-05-13 ;)
  • 您需要解释您使用的最接近今天的逻辑,以及如何处理决胜局。
  • @mitkosoft 我已经看过这个答案和很多其他人,但我没有得到它:/
  • 我用更多解释编辑了我的问题。我的意思是我需要两列 reservation_from 和 reservation_to 例如在 DESC 和最接近今天的功能订购

标签: php mysql sql


【解决方案1】:

您想按到现在的较小时差订购:

select *
from mytable
order by 
  least(abs(timestampdiff(second, now(), reservation_from)),
        abs(timestampdiff(second, now(), reservation_to)));

当然,您可以添加更多标准来处理关系。

【讨论】:

  • 他的意思是当时差相同时哪个先走。
【解决方案2】:

使用 LEAST。将计算每个字段与今天的差值,选择较小的。

 SELECT *
 FROM YourTable
 ORDER BY LEAST( ABS(TIMEDIFF(reservation_from, CURDATE()),
                 ABS(TIMEDIFF(reservation_to  , CURDATE())
               )

【讨论】:

  • @GordonLinoff 不知道。我想先在 sqlFiddle 上试一试,但现在对我来说已经失败了 :(
  • 我赞成你的回答,只是因为没有消极,但它没有用,对不起:(
  • @EimantasGabrielius 不要担心你不必这样做。但是,如果您发现答案不起作用,只需发表评论并说出问题所在(sintaxis 或错误结果),我会尝试修复它
  • @GordonLinoff 如果有时间,你能看看我的问题吗? stackoverflow.com/questions/36731198/…我在app端解决但想知道有没有sql解决方案?
  • @JuanCarlosOropeza 是的,首先你错过了一些括号,但无论如何这个查询给出了错误的结果。我认为有一些系统特定/时间错误。因为您的答案与接受的答案非常相似,但他使用的是 timestampdiff 而不是 timediff,并且是 now() 而不是 curdate()。顺便说一句,当我尝试调试并查看 CURDATE() 显示给我的内容时,mysql 给了我“0”。
猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 2018-04-24
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多