mysql - 查找 SQL 查询中的最后一条记录

标签 mysql sql

这实际上是大规模 SQL 查询的一部分,但我让这段代码正常工作,现在我似乎无法弄清楚为什么它找不到最后一个约会记录。

我想做的是将所有其他约会连接起来,找出哪一个是最后一个。我所有的结果似乎都是空的。但这是不正确的,因为我的数据肯定有约会。所以我认为我的选择查询有问题。任何帮助都会很棒。

SELECT `animal_id`, 
       FROM_UNIXTIME(`lastappointment`.`appointmentdata_starttime`,'%D %M %Y') AS 'Last Appointment'
FROM `animal`
LEFT JOIN (
    SELECT `lAppointment`.*
    FROM `appointment` AS `lAppointment`
    LEFT JOIN `appointment` AS `nlAppointment` 
       ON `nlAppointment`.`appointmentdata_starttime` <= NOW()
           AND `nlAppointment`.`appointmentdata_starttime` > `lAppointment`.`appointmentdata_starttime`
           AND `nlAppointment`.`appointmentdata_animal` = `lAppointment`.`appointmentdata_animal`
    WHERE `lAppointment`.`appointmentdata_starttime` <= NOW() 
       AND `nlAppointment`.`appointment_id` IS NULL
    ) AS `lastappointment` 
    ON `animal_id` = `lastappointment`.`appointmentdata_animal`
WHERE `animaldata_active` IS NOT NULL
GROUP BY animal_id;

最佳答案

使用 LEFT JOIN 获取 MAX() 是您能想到的最慢的方法。我建议您像这样更改内部查询(使用 GROUP BY):

SELECT `animal_id`,
  FROM_UNIXTIME(`lastappointment`.`last_appointment`, '%D %M %Y') AS 'Last Appointment'
FROM `animal`
LEFT JOIN (
  SELECT MAX(appointmentdata_starttime) AS last_appointment,
         appointmentdata_animal
  FROM appointment
  WHERE appointmentdata_starttime <= NOW()
  GROUP BY appointmentdata_animal
  ) AS `lastappointment` 
       ON `animal_id` = `lastappointment`.`appointmentdata_animal`
WHERE `animaldata_active` IS NOT NULL
-- GROUP BY animal_id; --BTW, this group_by is not needed

关于mysql - 查找 SQL 查询中的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340057/

相关文章:

php - 如何将表从mysql数据库导出到excel?

mysql - 三个类似的 MySql 查询,其中一个不起作用

sql - 来自两个不同表之一的引用键

mysql - 计算两个子查询mysql之间的百分比

php - 限制偏移量大于实际记录的mysql select语句

S3 上的 Mysql 数据目录

php - Mysql 更新 +1 无法在实时服务器上运行

sql - 使用查询将数据从一个数据库的表复制到另一个数据库的表中(两个表具有相同的结构)

SQL Server - 按情况排序

mysql - 将别名设置为数据库表字段中的值