Вы можете использовать подзапрос для получения количества записей для задачи, где статус равен 'ATTEMPT'
, и проверьте, по крайней мере, пять.Чтобы выбрать записи в правильном порядке, используйте row_number()
.Сначала на status
по убыванию (потому что 'SUCCESS' > 'ATTEMPT'
), а затем по дате, также по убыванию.Во внешнем SELECT
получают только записи с номером строки, равным единице.
SELECT x.task_id,
x.order,
x.task_status,
x.status,
x.date
FROM (SELECT t1.task_id,
t1.order,
t1.task_status,
t1.status,
t1.date,
row_number() OVER (PARTITION BY t1.task_id
ORDER BY t1.status DESC,
t1.date DESC) rn
FROM table t1
WHERE t1.task_status = 'FULFILLED'
AND (t1.status = 'SUCCESS'
OR t1.status = 'ATTEMPT'
AND (SELECT count(*)
FROM table t2
WHERE t2.task_id = t1.task_id
AND t2.tast_status = t1.task_status
AND t2.status = t1.status) >= 5)) x
WHERE x.rn = 1;