首页 > 试题广场 >

我们的一个任务系统,使用数据库去针对任务执行的情况进行记录。

[单选题]

我们的一个任务系统,使用数据库去针对任务执行的情况进行记录。每个任务在执行完成后都会向任务执行结果表中插入一条记录,关联到对应的任务id(taskId),并记录这次任务的执行编号、执行时间和状态,

任务执行结果表的结构如下:

TABLE `eo_task_report` (

  `id` bigint(10) NOT NULL AUTO_INCREMENT,

  `taskId` bigint(10) NOT NULL COMMENT '任务id,关联任务表id',

  `executeNo` bigint(20) NOT NULL COMMENT '执行编号,每次生成后,加1',

  `executeTime` datetime NOT NULL COMMENT '执行时间',

  `isValid` tinyint(3) NOT NULL DEFAULT '1' COMMENT '是否有效,1-有效;0-无效。默认为0'

  PRIMARY KEY (`id`),

)

任务执行结果表的样例内容如下:

 id   

 taskId   

 executeNo  

 executeTime                

 isValid  

 1

 1001

 1

 2019-05-08 19:05:12

 1

 2

 1001

 2

 2019-05-08 20:05:12

 1

 3

 1002

 1

 2019-05-08 19:05:12

 1

 4

 1001

 3

 2019-05-08 21:05:12

 1

 5

 1003

 1

 2019-05-09 10:28:20

 1

 6

 1003

 2

 2019-05-09 19:28:20

 1

 
请问以下SQL语句中哪条(或哪几条)可以获得每个任务最后一次的执行结果?

执行SQL:

1select * from eo_task_report ORDER BY executeTime desc GROUP BY taskId

2select a.* from eo_task_report a where executeTime = (select max(executeTime) from eo_task_report where taskId = a.taskId ) GROUP BY a.taskId   order by a.taskId

3select * from eo_task_report GROUP BY taskId ORDER BY executeTime desc

4select * from (select * from eo_task_report ORDER BY executeTime desc)a GROUP BY a.taskID

  • 1
  • 1,3
  • 2,4
  • 都不对
mysql 5.7版本之后默认打开only_full_group_by模式,即select的字段必须是groupBy的字段或能够用函数唯一确定值的字段。
select A.* from eo_task_report A join (select max(executeTime) as executeTime,taskId from eo_task_report group by taskId) B on A.taskId = B.taskId and A.executeTime = B.executeTime;
发表于 2022-01-22 22:14:16 回复(0)
提供的答案选项C错误,只有第2条sql是正确的,第4条sql错误。
发表于 2021-09-26 11:19:28 回复(0)
 select a.* from eo_task_report a where executeTime = (select max(b.executeTime) from eo_task_report b where b.taskId = a.taskId ) GROUP BY a.taskId   order by a.taskId
这段代码,先给要查询的表起了别名a,然后按行查询一张新表b,每次查询的范围是b.taskId=a.taskId的组,查询组中表b中execute列值等于a.executeTime最大值的一行,这样的组有3个,所以这样的executeTime也有3个。最后再根据taskId进行排序。
发表于 2021-09-11 12:04:58 回复(0)