我希望只使用最新的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
有人知道如何正确地做到这一点吗?
答案 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?这让我们很开心。