mysql - 如何根据最小日期行中的条件返回最大日期结果?

标签 mysql sql

我有一个这样的数据列表:

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/

相关文章:

c# - 我如何将从数据库中检索到的 int 转换为字符串

mysql - 从选择语句中的比较中删除单引号

php - mysql id字段刚刚提交

php - 上传到Mysql数据库时出错

mysql - 创建一个触发器,如果​​名称存在于另一个表中,则从该表中删除该名称

c# - 在已可用列中向数据库添加值时出现问题

mysql - View 的 SELECT 包含 FROM 子句中的子查询

mysql - 在 MySQL 中对结果进行分组

php - 无法使用 PHP 将日期和时间插入 MYSQL 数据库

SQL:如何计算可能重叠的日期范围之间的唯一天数?