-1

フィールド内の指定された値から開始し、共有値に基づいて別の行の別のフィールドでその値を見つけて、材料の移動、それを移動するために使用される機器、およびタイミングのテーブルを逆方向​​にトレースできるようにしたい.

次の表では、たとえば、EndCode 'M' から関連するすべての行を StartCode A までさかのぼって追跡できるようにする必要があります。 'U' は StartCode 'N' に戻ります。

表では、StartCode (材料) A と B が移動して EndCode C になります。EndCode C は次に StartCodeD になり、次に StartCode E で移動して EndCode F になります。オレンジ/青の行は、材料の動きのグループを表します。

これから、「EndedAt」という名前の新しいフィールドとして、次のイベントの StartedAt 時刻をもたらす新しいテーブル/ビューを作成したいと考えています。次のようになります。

ROW_NUMBER と CTE を使用して、StartedAt を新しいフィールドとして "EndedAt" として取得する再帰クエリを作成しました。

次に、ネストされた SELECT ステートメントを使用して、EndCode 'M' に関連するすべての StartCode を検索し、テーブルをループバックして、StartCode 列で関連するすべての EndCode を検索しようとしました。これにより、いくつかの行のみが表示されます。ネストされたステートメントを数回繰り返して、さまざまな行に移動しました。

目的のテーブル/ビューを作成するために必要なすべての関連する開始/終了コードを取得するのに助けが必要です.

最終的にレポートがテーブルに添付され、選択した EndCode パラメータ (M、U など) でテーブルをフィルタリングできるようになります。

    CREATE TABLE MyTable (
  `StartCode` VARCHAR(1),
  `StartedAt` DATETIME,
  `EndCode` VARCHAR(1)
);

INSERT INTO MyTable (`StartCode`, `StartedAt`, `EndCode`)
VALUES
  ('A', '01/01/2019 01:00', 'C'),
  ('B', '01/01/2019 02:15', 'C'),
  ('C', '01/01/2019 03:00', 'F'),
  ('D', '01/01/2019 03:19', 'F'),
  ('E', '01/01/2019 04:00', 'F'),
  ('F', '01/01/2019 04:14', 'G'),
  ('G', '01/01/2019 05:00', 'J'),
  ('H', '01/01/2019 05:37', 'J'),
  ('I', '01/01/2019 05:45', 'J'),
  ('J', '01/01/2019 06:00', 'L'),
  ('K', '01/01/2019 06:09', 'L'),
  ('L', '01/01/2019 07:00', 'M'),
  ('N', '01/01/2019 09:20', 'P'),
  ('O', '01/01/2019 09:37', 'P'),
  ('P', '01/01/2019 09:45', 'Q'),
  ('Q', '01/01/2019 11:00', 'T'),
  ('R', '01/01/2019 11:10', 'T'),
  ('S', '01/01/2019 11:47', 'T'),
  ('T', '01/01/2019 11:58', 'U');
4

1 に答える 1