开发者社区> 问答> 正文

SQL查询帮助-任务排序,分组和状态+日期条件问题

希望我能公正地解决问题,因为很难在标题中概括它!(建议欢迎在评论中提出)

对,所以这里是我的表:

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

展开
收起
保持可爱mmm 2019-11-18 17:52:55 540 0
1 条回答
写回答
取消 提交回答
  • 显然,您必须对此进行一些修复,但是我希望您能理解。

    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

    2019-11-18 17:53:01
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载