我有来自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)和之后的状态(平均计数)执行分组。因此,这意味着我需要与示例中所示相同的结构。
答案 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
,然后根据您的数据)。