mysql:以某种特定记录使用不同参数出现两次的方式修改输出

时间:2016-12-08 15:49:00

标签: mysql group-by

我有来自sql查询的以下输出:

parent_id id     status
1         NULL   before
2         19     before
2         20     after

MySQL的:

select 
 parent_id_B,
 id,
 IF(created_final_at >= @start_date, 'after', IF(created_final_at < @start_date AND created_final_at >= @back_end_date, 'before', IF(created_final_at IS NULL,NULL,'late'))) as status_inv
from bblabla

我需要关注: 如果id为NULL且status在之前,我想添加一个具有相同id和父id但状态为'after'的记录。

parent_id id     status
1         NULL   before
2         19     before
2         20     after
1         NULL   after

我想将上层查询用作子查询,而不创建任何新表。我想通过parent_id(计数ID)和之后的状态(平均计数)执行分组。因此,这意味着我需要与示例中所示相同的结构。

1 个答案:

答案 0 :(得分:0)

您可以使用另一个2行查询join查询。当满足条件(在on中)时,它将生成2行,否则将使用原始值(一次)。它将保留您的原始结构并将您的查询用作子查询。

select parent_id, id, coalesce(new_status, status) as status
from ( <your query> ) as subquery 
left join 
  (select 'before' as new_status
   union select 'after') as rowdoubler
on id is null and status = 'before';

它不会检查结果集中是否已存在该行(您可以添加distinct,然后根据您的数据)。