mysql - MySQL根据子表状态条件检查创建视图
问题描述
表:任务(父)
id | name | ...(other columns)
表:task_history(子)
id | task_id(fk) | date | status(PENDING,OVERDUE,COMPLETE) | ...(other columns)
子表具有基于不同日期的父项的多个条目。
我想根据以下条件检查创建一个视图,以进行直到今天的日期比较task_status_view
。task_id | current_status
(每个条目应该只有一个task.id
)
- IF:有任何条目,
status = 'OVERDUE'
然后将其current_status
视为'O'
- ELSE IF:有任何条目,
status = 'PENDING'
然后将其current_status
视为'P'
- ELSE:如果有上述任何一项,则考虑
current_status
为'COMPLETE'
解决方案
您正在寻找的是所谓的条件聚合。
select
task_id,
case
when sum(status = 'OVERDUE') > 0 then 'OVERDUE'
when sum(status = 'PENDING') > 0 then 'PENDING'
else 'COMPLETE'
end as total_status
from task_histories
group by task_id
order by task_id;
(在 MySQL 中,true 等于 1,false 等于 0,所以我们可以将条件相加。)
推荐阅读
- python - Python 日志记录模块平台差异:OSX 与 Linux
- php - array_udiff 不应该为我的两个数组的每次迭代调用我的函数吗?
- r - 具有更改索引大小的嵌套 foreach
- javascript - GoogleSheets 中的下拉菜单
- python - 如何将嵌套子进程中的“不可腌制”对象传递回Python中的主线程
- javascript - 隐藏文件扩展名时识别文件类型
- python - Django 不会打开静态文件图像,Django 3
- c++ - 何时在 constexpr 函数中使用模板非类型类或普通参数
- azure - Azure Cosmos DB 表中查找表的分区键
- postgresql - 续集,Postgres。保存日期,包括 UTC 偏移量