我有一个表(call_history),它具有针对另一个表(call_detail)中的单个ID的多个记录。我正在尝试返回一个结果,该结果会为每个ID提供一个行,但最近的条目会显示一行。如何返回GROUP BY语句的最新记录
因此,例如,针对单个ID对所有行进行分组,但只返回updated_at字段(它是日期字段)的最新行。
到目前为止,我查询...
SELECT MAX(cd.id) as id, cd.first_name, cd.summary, cd.due_at, ch.body, ch.updated_at
FROM call_detail as cd
LEFT JOIN call_history as ch on cd.id = ch.ticket_id
WHERE cd.status = 'open' AND (NOW() > due_at)
GROUP BY cd.id HAVING COUNT(*) > 1
ORDER BY cd.due_at DESC
...返回“种”我想要的东西,但它给我对抗的updated_at领域最早的条目。我需要另一种方式。
更新
我的表结构如下:
Call_Detail
id | summary | description | due_at | first_name | last_name
1 | Call 1 | some text | 20/02/2014 17:00:00 | Joe | Bloggs
2 | Call 2 | some text | 18/02/2014 15:00:00 | Fred | Durst
3 | Call 3 | some text | 02/03/2014 01:00:00 | Joe | Bloggs
Call_History
id | ticket_id | body | updated_at | first_name | last_name
1 | 1 | update 1 | 17/02/2014 16:00:00 | Joe | Bloggs
2 | 1 | update 2 | 17/02/2014 16:02:00 | Fred | Durst
3 | 2 | update 1 | 16/02/2014 12:02:00 | Tom | Thumb
4 | 1 | update 3 | 17/02/2014 16:10:00 | Joe | Bloggs
5 | 2 | update 2 | 17/02/2014 01:02:00 | Jack | Reacher
等等
我需要检索的输出如下:
ticket_id | summary | due_at | first_name | body | updated_at
1 | Call 1 | 20/02/2014 17:00:00 | Joe | Update 3 | 17/02/2014 16:10:00
2 | Call 2 | 18/02/2014 15:00:00 | Fred | Update 2 | 17/02/2014 01:02:00
这听起来像你可能想与某些值的MAX有关的细节(可能是Call_Detail ID列,可能是Call_History中的某个列),但对表的描述还不清楚。请在每个表格中包含显着列的骨架模式,甚至可能包含一些示例数据和该数据的预期输出。我想你会在通话记录表上需要一些更复杂的计算,但我还不确定。 –
提供表格的框架 –
此问题已在StackOverflow上提出并回答了数百次。请参阅[tag:most-n-per-group]标签。 –