使用连接时GROUP BY无法正确排序

时间:2013-12-03 21:12:07

标签: mysql group-by left-join

我希望只使用最新的sched_date从连接表fr_movements中看到一条记录,但我总是得到oldedst sched_date。由于ORDER BY按sched_date进行排序,而我正在按people.ID进行分组。我只能按预期从fr_movements中获取一条记录,只是错误的记录。

SELECT `fr_movements`.`ID`, fr_movements_list.movement_type, 
   fr_movements.sched_date, fr_movements.comp_date, people.firstname, people.lastname
FROM fr_movements
LEFT JOIN people ON people.ID = fr_movements.`people_id` 
LEFT JOIN fr_movements_list ON (fr_movements.move_type_id = fr_movements_list.ID)
WHERE fr_movements.org_id = 25 AND fr_movements.move_type_id IN (54,53,52,51,50,55)
GROUP BY people.ID
ORDER BY people.org_name, fr_movements.sched_date ASC

有人知道如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

正如@bluefeet所提到的

  

您正在错误地使用GROUP BY。 GROUP BY应该与聚合函数一起使用

您需要将所有列放在GROUP BY之后,但这很复杂。我认为DISTINCT可能会对您有所帮助。像这样:

SELECT *
FROM
(
    SELECT DISTINCT people.org_name, `fr_movements`.`ID`, fr_movements_list.movement_type, 
       fr_movements.sched_date, fr_movements.comp_date, people.firstname, people.lastname
    FROM fr_movements
        LEFT JOIN people ON people.ID = fr_movements.`people_id` 
        LEFT JOIN fr_movements_list ON (fr_movements.move_type_id = fr_movements_list.ID)
    WHERE fr_movements.org_id = 25
        AND fr_movements.move_type_id IN (54,53,52,51,50,55)
) x
ORDER BY org_name, sched_date ASC

如果不起作用,您会发布数据吗?架构到sqlfiddle?这让我们很开心。