希望我能公正地解决问题,因为很难在标题中概括它!(建议欢迎在评论中提出)
对,所以这里是我的表:
Tasks task_id (number) job_id (number) to_do_by_date (date) task_name (varchar / text) status (number) completed_date (date) 为了论证,让我们确定status的值:
1 = New 2 = InProgress 3 = Done 我在尝试执行时遇到的麻烦是创建一个可以拉回所有任务的查询:
其中任何一项任务job_id的status<>完成 除非a的所有任务job_id均已完成,但一个或多个任务completed_date的今天为a 按to_be_done_by日期排序,但将所有job_id任务分组在一起 因此,job_id首先显示下一个“ to_do_by_date”任务的 有关数据的一些信息:
一个job_id可以有任意数量的任务
这是我尝试获取的输出示例:
task_id job_id to_do_by_date task_name status completed_date 1 1 yesterday - 3 yesterday 2 1 today - 3 today 3 2 now - 3 today 4 2 2 hours time - 2 {null} 5 2 4 hours time - 2 {null} 6 2 tomorrow - 1 {null} 7 3 3 hours time - 2 {null} 8 3 tomorrow - 1 {null} 9 3 tomorrow - 1 {null}
我使用的是Oracle 10g,因此对于Oracle或ANSI SQL的答案,或有关如何实现此方法的提示将是理想的,并且如果您的解决方案需要,我可以创建视图或将其包装在存储过程中以从应用程序中卸载逻辑。它。
这是一个SQL脚本,它将创建上面显示的示例测试数据:
create table tasks (task_id number, job_id number, to_do_by_date date, task_name varchar2(50), status number, completed_date date); insert into tasks values (0,0,sysdate -2, 'Job 0, Task 1 - dont return!', 3, sysdate -2); insert into tasks values (1,1,sysdate -1, 'Job 1, Task 1', 3, sysdate -1); insert into tasks values (2,1,sysdate -2/24, 'Job 1, Task 2', 3, sysdate -2/24); insert into tasks values (3,2,sysdate, 'Job 2, Task 1', 3, sysdate); insert into tasks values (4,2,sysdate +2/24, 'Job 2, Task 2', 2, null); insert into tasks values (5,2,sysdate +4/24, 'Job 2, Task 3', 2, null); insert into tasks values (6,2,sysdate +1, 'Job 2, Task 4', 1, null); insert into tasks values (7,3,sysdate +3/24, 'Job 3, Task 1', 2, null); insert into tasks values (8,3,sysdate +1, 'Job 3, Task 2', 1, null); insert into tasks values (9,3,sysdate +1, 'Job 3, Task 3', 1, null); commit;
非常感谢您的帮助:o)
问题来源于stack overflow
显然,您必须对此进行一些修复,但是我希望您能理解。
SELECT task_id, job_id, to_do_by_date, task_name, status, completed_date FROM Tasks WHERE job_id IN ( SELECT job_id FROM Tasks WHERE status <> 'Done' GROUP BY job_id) OR job_id IN ( SELECT job_id FROM Tasks WHERE status = 'Done' AND completed_date = 'Today' AND job_id NOT IN (SELECT job_id FROM Tasks WHERE status <> 'Done' GROUP BY job_id) GROUP BY job_id) ORDER BY job_id, to_do_by_date
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。