【发布时间】:2012-01-20 22:15:53
【问题描述】:
我有一个表“服务”,其中包含有关服务车辆的详细信息。它有一个 id 和作为外键的 Vehicle_registrationNumber。每当维修车辆时,都会制作新记录。因此,例如,如果我为注册 ABCD 的汽车提供服务,它将创建新行,并且我将在服务表中设置 car_reg、日期和汽车里程(id 设置为自动增量)(例如 12 | 20/01/ 2012 | ABCD | 1452,同一辆车的另一项服务将创建第 15 行 | 26/01/2012 | ABCD | 4782)。
现在我想检查汽车是否需要维修(上次维修是在 6 个月或更长时间前,或者汽车的当前行驶里程自上次维修以来已超过 1000 英里),为此我需要知道最后一次服务的日期和最后一次服务的汽车里程。所以我想创建一个子查询,它将为每辆车返回一行,而我感兴趣的行是最新的行(具有最大的 id 或最新的 endDate)。我还需要将它与其他表连接起来,因为我的视图需要它(我使用 CodeIgniter,但不知道是否可以使用 CI 的 ActiveRecord 类编写子查询)
SELECT * FROM (
SELECT *
FROM (`service`)
JOIN `vehicle` ON `service`.`Vehicle_registrationNumber` = `vehicle`.`registrationNumber`
JOIN `branch_has_vehicle` ON `branch_has_vehicle`.`Vehicle_registrationNumber` = `vehicle`.`registrationNumber`
JOIN `branch` ON `branch`.`branchId` = `branch_has_vehicle`.`Branch_branchId`
GROUP BY `service`.`Vehicle_registrationNumber` )
AS temp
WHERE `vehicle`.`available` != 'false'
AND `service`.`endDate` <= '2011-07-20 20:43'
OR service.serviceMileage < vehicle.mileage - 10000
【问题讨论】:
-
您创建的语句将不起作用,因为一个不太旧的服务条目将被过滤掉。另一个提示英里应该是 1000 或 10000 .. 文本和 sql 语句不同