0

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 つの条件すべての行を取得できるように、これを行う別の方法はありますか。

4

0 に答える 0