mysql 找到比今天小的最新记录

标签 mysql

请帮助 MySQL 新手:

我有 2 张 table :

assets

asset_id |  description
------------------------
001      |  Crate of Laptops
002      |  Crate of OhBots
003      |  Crate of Spheros


bookings

id       | asset_id   |  start_date     |     end_date   |   location
----------------------------------------------------------------------
1        | 001        |    2018/10/01   |   2018/10/10   |   Barnet
2        | 001        |    2018/10/12   |   2018/10/15   |   Hendon
3        | 002        |    2018/10/01   |   2018/10/10   |   Finchley
4        | 001        |    2018/12/01   |   2018/12/04   |   Brent

我需要显示开始日期小于今天的每项 Assets 的所有最新预订 - 因此,如果今天的日期是 2018/10/19,它应该为我提供预订 ID 的详细信息:

asset_id     |       location
------------------------------
001          |       Hendon
002          |       Finchley

到目前为止,我有这个,但它没有显示最新的预订 - 它显示了所有预订。我认为我需要使用 MAX() 的子查询,但无法使其工作。有很多关于如何从表中获取最新值的帖子,但我还需要 start_date 是过去的日期。

SELECT asset.asset_id, asset.description, booking.location, booking.start_date
FROM  assets AS asset
INNER JOIN bookings AS booking 
ON asset.asset_id=booking.asset_id
WHERE booking.start_date <= NOW()
ORDER BY asset.asset_id DESC;

最佳答案

您是正确的,您需要使用 MAX() 来查找子查询中每个 Assets 的最大开始日期,然后需要将其连接回 booking表查找其他对应信息。

SELECT a.id, a.description, b.start_date, b.location
FROM assets a
INNER JOIN bookings b ON (a.id = b.asset_id)
INNER JOIN (
    SELECT b.asset_id, MAX(b.start_date) AS start_date
    FROM bookings b
    WHERE b.start_date < CURDATE()
    GROUP BY b.asset_id
) c ON (b.asset_id = c.asset_id AND b.start_date = c.start_date)

这是一个工作数据库 fiddle :https://www.db-fiddle.com/f/mci3TkZpZxKcJckWNVHrBK/0

关于mysql 找到比今天小的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903158/

相关文章:

mysql - 选择并加入动态表名

php - 为什么 PHP 从一个数据条目向 MySQL 插入多行?

php - MySQL返回相同数据的不同行

mysql - SQL- LOAD DATA INFILE + REPLACE 不起作用(第 1 行不包含所有列的数据)

MySQL 在子子查询中用连接替换 IN 和 EXISTS

java - 如何将 SQL 结果集输出限制为 1 个结果而不是每个查询结果?

java - 使用 Java 使用数据库每天重置自动编号

mysql - 如何替换MySQL中的确切单词?

mysql - 如何检查用户请求正在访问(未更新)表(MySQL)

mysql - MySQL分组索引和单一索引有什么区别