DB にステップ テーブルがあります。操作ごとに次に実行するすべてのステップを取得したい (各ステップは操作に関連付けられている)。ステップは、フィールド step_number (型: decimal) に従って順番に実行されます。条件は以下の通り
1- 同じ操作の前のステップが完了していれば、ステップを開始できます。
2- 同じ操作に属し、たとえば 1.1 と 1.2 の同じ整数値を持つステップは、同時に実行できます。
3-操作の最初のステップの場合は、それを開始します
SELECT
MIN(s1.step_number),
s1.type,
s1.operation,
MAX(s2.step_number)
FROM steps s1
LEFT JOIN steps s2
ON s1.operation = s2.operation
WHERE
s1.state= 'not_started'
AND s2.state != 'not_started'
AND
(
/* 1- A step can be started if previous step of same operation is completed. */
(s2.state = 'confirmed')
OR
(
/* 2- Steps belonging to same operation and having same integer value for e.g. 1.1 and 1.2 can run concurrently */
s2.state != 'confirmed'
AND CAST(s1.step_number AS UNSIGNED) = CAST(s2.step_number AS UNSIGNED)
)
OR
/* 3- If its first step of the operation then start it */
s1.step_number = (
SELECT
MIN(step_number)
FROM steps s3
WHERE operation = s1.operation
)
)
GROUP BY operation
クエリは、条件 3 に一致する行を返しません。これは、これらの行が左結合のために既に除外されているためです。3 つの条件すべての行を取得できるように、これを行う別の方法はありますか。