Я прошу прощения за плохой заголовок, позвольте мне проиллюстрировать сначала
Вот таблица:
select task_id, task_status, date_change, username from logs
order by task_id, date_change
Результаты:
TASK_ID TASK_STATUS DATE_CHANGE USERNAME
1 101 Green 2019/01/03 Camille
2 101 Blue 2019/01/07 Lucas
3 101 Green 2019/01/09 Rudy
4 102 Blue 2019/01/03 Lucas
5 102 Green 2019/01/04 Delphine
6 103 Yellow 2019/01/07 Penelope
7 103 Green 2019/01/11 Rudy
8 103 Blue 2019/01/14 Delphine
9 103 Green 2019/01/18 Camille
10 104 Blue 2019/01/08 Rudy
11 104 Green 2019/01/10 Camille
12 104 Green 2019/01/14 Penelope
У меня есть несколько задачкаждый из которых может иметь разный статус.Для каждой задачи я хочу извлечь строку с самым ранним зеленым статусом.
Так что в этом случае результат будет:
TASK_ID TASK_STATUS DATE_CHANGE USERNAME
1 101 Green 2019/01/03 Camille
2 102 Green 2019/01/04 Delphine
3 103 Green 2019/01/11 Rudy
4 104 Green 2019/01/10 Camille
Вот самое близкое, что я получил крешение:
select task_id, task_status, date_change, username
from logs
where task_status =('Green')
and task_id = ('101')
and date_change = (
select min(date_change)
from logs
where task_status = ('Green') and task_id =('101')
)
Это совсем не хорошо, я должен сделать запрос для каждой задачи, совершенно непрактично.
Есть ли способ использовать тип переменной и изменить последнюю строку на что-то вроде:
and date_change = (
select min(date_change)
from logs
where task_status = ('Green') and task_id =($CURRENT_TASK_ID)
)
Или, может быть, другим способом решить эту проблему?
Большое спасибо за ваше время.