mysql - sql 选择不同的地方最大日期

标签 mysql sql

我有 3 个表“维护”、“汽车”、“用户”。我想从表维护中选择具有不同 car_id 的所有数据以及每个不同的最后一条记录(基于最大 Maintenance_date)

SELECT
     m. * , u.username, c.Model, c.Make, c.License, c.Milage, COUNT( m.process_id ) AS count_nr
    FROM
      maintenances AS m

    LEFT JOIN users AS u ON u.id = m.user_id
    LEFT JOIN cars AS c ON c.id = m.car_id

    WHERE
    maintenance_date = (SELECT MAX(maintenance_date) FROM maintenances WHERE car_id = m.car_id)

问题是此查询仅返回一条记录,该记录具有所有记录中的最大日期。我希望所有记录(不同的 car_id 和具有相同 car_id 的记录仅显示 max(maintenance_date) 的值)

最佳答案

这是您的查询:

SELECT m. * , u.username, c.Model, c.Make, c.License, c.Milage, COUNT( m.process_id ) AS count_nr
----------------------------------------------------------------^
FROM maintenances AS m LEFT JOIN
     users AS u
     ON u.id = m.user_id LEFT JOIN
     cars AS c
     ON c.id = m.car_id
WHERE maintenance_date = (SELECT MAX(maintenance_date) FROM maintenances WHERE car_id = m.car_id);

这是一个聚合查询。如果没有group by,则仅返回一行(所有行都在一组中)。因此,添加分组依据:

SELECT m. * , u.username, c.Model, c.Make, c.License, c.Milage, COUNT( m.process_id ) AS count_nr
FROM maintenances AS m LEFT JOIN
     users AS u
     ON u.id = m.user_id LEFT JOIN
     cars AS c
     ON c.id = m.car_id
WHERE maintenance_date = (SELECT MAX(m2.maintenance_date) FROM maintenances m2 WHERE m2.car_id = m.car_id);
GROUP BY c.id

我还修复了相关语句,以明确它与外部查询相关。

关于mysql - sql 选择不同的地方最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856920/

相关文章:

MySQL 变量数据库名称语法错误

php - php 查询错误

MySQL建表语法错误

PHP 执行 - 关闭连接后我可以使用 Ajax 方法吗

sql - 在 MySQL 中按月和年分组

php - 我应该如何引用 Web 主机上的 MySQL 服务器?

javascript - Node.js SQLite 3 返回 promise

mysql - SQL SELECT 根据工作时间获取公司状态

sql - 使用带有 BETWEEN 和空日期参数的 WHERE 子句

sql - Hive 插入覆盖表