Надеюсь, я справлюсь с задачей, потому что было слишком сложно обобщить ее в названии! (предложения приветствуются в комментариях)
Правильно, вот мой стол:
Tasks
task_id (number)
job_id (number)
to_do_by_date (date)
task_name (varchar / text)
status (number)
completed_date (date)
для аргументов давайте сделаем значения статуса:
1 = New
2 = InProgress
3 = Done
и у меня возникли проблемы при попытке создать запрос, который возвращает все задачи:
- где любая из задач для
job_id
имеет status
<> Готово
- за исключением случаев, когда все задачи для
job_id
выполнены, но одна или несколько задач имеют completed_date
сегодняшнего дня
- упорядочено по дате
to_be_done_by
, но сгруппированы все задачи job_id вместе
- так что
job_id
со следующей задачей `to_do_by_date 'отображается первым
некоторая информация о данных:
- a
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;
Большое, большое спасибо за вашу помощь: о)