Вопрос очень сложный для понимания. Я сделал все, что мог, используя предоставленную вами информацию.
Я использовал следующее для создания таблицы во втором показанном примере (ни в коем случае вы не должны использовать это для вашей реальной схемы таблицы. это вместе быстро):
CREATE DATABASE IF NOT EXISTS TEST;
CREATE TABLE IF NOT EXISTS TEST.test_table (
ID INT AUTO_INCREMENT PRIMARY KEY,
SYSTEM_ID INT(10) NOT NULL,
TYPE_ID INT(10) NOT NULL,
STAGE_ID INT(10) NOT NULL,
CURRENT_PHASE INT(10) NOT NULL,
COMPLETE BOOLEAN,
MATRIX_ID INT(10),
DEVIATION_ID INT
);
INSERT INTO TEST.test_table (ID,SYSTEM_ID,TYPE_ID,STAGE_ID,CURRENT_PHASE,COMPLETE,MATRIX_ID,DEVIATION_ID)
VALUES
(NULL,1,1,1,5,true,1,NULL),
(NULL,1,1,2,1,false,1,NULL),
(NULL,1,2,1,4,false,2,NULL),
(NULL,1,2,2,1,false,2,NULL),
(NULL,1,2,1,5,true,NULL,1),
(NULL,1,2,2,1,false,NULL,1);
Затем я создал следующие запросы, чтобы ответить на ваши вопросы 1,2 и 3. Я не уверен, что вы хотите, чтобы они все ответили одним запросом, который я делаю не думаю, что что-то из предоставленного вами набора данных будет соответствовать критериям, которые я решил не использовать.
1 - все идентификаторы, в которых matrix_id одинаковы и задание с stage_id = 1 выполнено = true:
SELECT
MAX(ID) ID
FROM TEST.test_table tt
WHERE MATRIX_ID IS NOT NULL
GROUP BY tt.MATRIX_ID
HAVING SUM(tt.COMPLETE) = (COUNT(*)-1)
;
Ответ : ID 2
Примечание : Полагаю, это не будет считаться проверкой, если STAGE_ID равен 1 и истинно, но я думаю, что это эффективно, если вы получите тот же результат и со временем при этом он всегда будет следить за тем, чтобы задание до его завершения, так как сумма СУБД завершенного логического поля всегда должна быть на 1 меньше, чем общее количество задач, НО, оставаясь, вы начнете укладывать больше задач, вам нужно будет немного их уточнить и подойти с чем-то более точным.
2 - И все идентификаторы, где deviation_id одинаковы, а задача с stage_id = 1 и complete = true:
SELECT
MAX(ID) ID
FROM TEST.test_table tt
WHERE tt.DEVIATION_ID IS NOT NULL
GROUP BY tt.DEVIATION_ID
HAVING SUM(tt.COMPLETE) = (COUNT(*)-1)
;
Ответ : ID 6
3 - все идентификаторы, где stage = 2 и current_phase равен [2,3 или 4] и завершен = fal:
SELECT
tt.ID
FROM TEST.test_table tt
WHERE tt.STAGE_ID = 1
AND tt.CURRENT_PHASE IN (2,3,4)
AND tt.COMPLETE = false
;
Ответ: : ID 3
Я думаю, что, поняв команду GROUP BY и команду HAVING, вы получите некоторое представление о том, как можно решить эти проблемы.
Вы можете проверить это здесь: https://www.db-fiddle.com/f/dD67jzQpENdJ5YSLBxoLbD/0