Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何返回GROUPBY语句的最新记录_Mysql_Greatest N Per Group - Fatal编程技术网

Mysql 如何返回GROUPBY语句的最新记录

Mysql 如何返回GROUPBY语句的最新记录,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有一个table call_历史记录,在另一个table call_详细信息中,该历史记录针对单个ID有多条记录。我正在尝试返回一个结果,该结果将为每个ID提供一行,但最近的条目除外 例如,根据单个ID对所有行进行分组,但只返回更新的_at字段(日期字段)的最近一行 到目前为止我的疑问 SELECT MAX(cd.id) as id, cd.first_name, cd.summary, cd.due_at, ch.body, ch.updated_at FROM call_detail a

我有一个table call_历史记录,在另一个table call_详细信息中,该历史记录针对单个ID有多条记录。我正在尝试返回一个结果,该结果将为每个ID提供一行,但最近的条目除外

例如,根据单个ID对所有行进行分组,但只返回更新的_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
…返回我想要的“种类”,但它为我提供了更新的_at字段中最早的条目。我需要另一种方式

更新

我的表格结构如下:

打电话询问详情

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
呼叫历史

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

尝试此查询。您需要call_history中的最新记录,因此首先应使用这些日期进行子查询,请参见CH_MAX子查询,然后使用ticket_id加入并在以下位置更新:


听起来您可能想要与某个值的最大值相关的详细信息,可能是Call\u Detail ID列,也可能是Call\u历史记录中某个给定值的某个列,但是您对表的描述还不清楚。请包括每个表中突出列的框架模式,甚至可能包括一些示例数据和该数据的预期输出。我想你需要在call history表上进行一些更复杂的计算,但我还不确定是什么。提供表的框架这个问题在StackOverflow上已经被问了数百次并得到了回答。请看标签。太好了!感谢您花时间为我解决这个问题-非常感谢!我还在努力想办法,但这正是我需要的。再次感谢!
SELECT cd.id as id, 
       cd.first_name, 
       cd.summary, 
       cd.due_at, 
       ch.body, 
       ch.updated_at 
FROM call_detail as cd 

LEFT JOIN 
 ( SELECT ticket_id, MAX(updated_at) as max_updated_at 
          FROM call_history 
          GROUP BY ticket_id
  ) as CH_MAX ON cd.id = CH_MAX.ticket_id

LEFT JOIN call_history as ch ON cd.id = ch.ticket_id 
                                AND CH_MAX.max_updated_at = ch.updated_at

WHERE cd.status = 'open' AND (due_at<NOW()) 
ORDER BY cd.due_at DESC