我有一个这样的数据列表:
ID step date 1 SECOND_ATTEMPT 03/19/2018 1 QC_READY 03/23/2018 1 QC_REJECTS 03/26/2018 2 SCHEDULED 02/01/2018 2 FINISHED 02/04/2018 3 SECOND_ATTEMPT 04/02/2018 3 QC_READY 04/03/2018 4 SECOND_ATTEMPT 01/15/2018 4 FINISHED 01/25/2018
My query, stripped down, looks like this.
select
j.id,
wfh.step,
wfh.date
from Job j
join work_flow_history wfh on j.id = wfh.job_id
每个作业中的每个步骤的 wfh ID 都是唯一的。因此,如果查看步骤 ID,它将如下所示:
wfh_ID step
001 SECOND_ATTEMPT
002 QC_READY
etc...
当步骤列包含 SECOND_ATTEMPT
且不包含 FINISHED
时,我想返回行中每个 ID 中包含最新日期的所有信息.正确的结果集应该是这样的:
ID step date 1 QC_REJECTS 03/26/2018 3 QC_READY 04/03/2018
最佳答案
作为要求,这有点奇怪。这是一种方法:
select t.*
from t
where not exists (select 1 from t t2 where t2.id = t.id and t2.step = 'FINISHED') and
exists (select 1 from t t2 where t2.id = t.id and t2.step = 'SECOND_ATTEMPT') and
t.date = (select max(t2.date) from t t2 where t2.id = t.id);
另一种只有一个子查询的方式:
select t.*
from t join
(select t.id, max(t.date) as maxd
from t
group by t.id
having sum(t.step = 'SECOND_ATTEMPT') > 0 and
sum(t.step = 'FINISHED') = 0
) tt
on tt.id = t.id and tt.maxd = t.date;
关于mysql - 如何根据最小日期行中的条件返回最大日期结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50052471/