【问题标题】:MySQL - get the nearest date and show it for every row in tableMySQL - 获取最近的日期并为表中的每一行显示它
【发布时间】:2015-03-25 10:32:20
【问题描述】:

我有 2 张桌子 - 设备和预订。

设备表如下:

ID     NAME
1      termo
2      hydro
3      force
4      hammer

预订表:

ID     EQUIPMENT_ID     START         END
1      2                25.3.2015     26.3.2015
2      2                26.3.2015     27.3.2015
3      1                28.3.2015     29.3.2015
4      3                27.3.2015     28.3.2015

我希望能够为每台设备打印所有设备以及距离当前日期最近的未来日期。

所以当日期为 (24.3.2015) 时输出如下所示:

NAME      START       END
termo     28.3.2015   29.3.2015
hydro     25.3.2015   26.3.2015
force     27.3.2015   28.3.2015
hammer    null        null

我尝试了一些嵌套查询,但不起作用。从当前日期找到最近的未来日期是我知道的

SELECT start FROM reservations WHERE start > NOW() ORDER BY start 限制 1 个

但我不知道如何加入表格以找到每个设备的最近日期。有什么想法吗?

【问题讨论】:

标签: mysql sql date join


【解决方案1】:

我认为关联子查询是最简单的方法。但是,您需要预订表中的三列,所以让我们获取 id 并加入其余部分:

select e.*,
       (select r.id
        from reservations r
        where r.equipment_id = e.id and r.start > now()
        order by r.start asc
        limit 1
       ) as next_resid
from equipment e;

然后连接需要一个子查询:

select e.name, r.start, r.end
from (select e.*,
             (select r.id
              from reservations r
              where r.equipment_id = e.id and r.start > now()
              order by r.start asc
              limit 1
             ) as next_resid
      from equipment e
     ) er join
     reservations r
     on er.next_resid = r.id;

请注意,end 不是一个好的列名称。虽然不是 MySQL 保留字,但它是 SQL 关键字。

【讨论】:

  • 感谢您的帮助!我对它进行了一点编辑,它正在做这些事情。我将编辑您的评论以获得确切答案
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 2022-01-24
  • 2016-07-07
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多