0

テンプレートからオブジェクトを作成しています。これらのオブジェクトにはいくつかのデータポイントがあり、すべてのパーツの各データポイントを測定して、パーツがテンプレートからどれだけ離れているかを確認します。最新の 100 個の測定値を取得し、それらの平均と標準偏差を見つけたいと考えています。私のテーブル値の詳細は次のとおりです。

  • reqt_id: それぞれの異なる reqt_id は、オブジェクトのデータポイントを表します
  • var: 各 var は 1 つの測定値です。
  • inst_id: すべての新しい測定値 (var) は inst_id を取得するため、これを使用して最新の測定値を特定します

要約すると、パーツに測定対象の 5 つの異なるデータポイントがある場合、5 つの異なる reqt_id を持つことになります。測定する部品が 500 個ある場合、reqt_id ごとに 500 個の変数測定が行われます。SQL ストアド プロシージャでやりたいことは、特定の reqt_id から最新の 100 変数の測定値を取得し、その AVG と STDEV を取得して、次のものに移動するカーソルを作成することです。理想的には、私のテーブルは次のようになります。

..REQT_ID..|..AVG..|..STDDEV..

..0001........|..0.32..|..0.0012.....

..0002........|..0.27..|..0.0005.....

以下は、これまでのカーソルの内容です。今のところうまくいかないので、何が欠けているのか疑問に思っていました。

 DECLARE cursor_reqt_ids CURSOR FOR
 SELECT r.reqt_id, AVG(r.[var]), STDEV(r.[var])
 FROM RESULTS r

DECLARE @reqt_id AS INT

OPEN cursor_reqt_ids
 FETCH NEXT FROM cursor_reqt_ids INTO @reqt_id
 WHILE @@FETCH_STATUS = 0
 BEGIN
       SELECT TOP 100 r.[var]
       FROM RESULTS r
       WHERE r.[var] != 0
       ORDER BY r.inst_id DESC
 END
 CLOSE cursor_reqt_ids
DEALLOCATE cursor_reqt_ids
4

2 に答える 2

1
 WHILE @@FETCH_STATUS = 0
 BEGIN
       SELECT TOP 100 r.[var]
       FROM RESULTS r
       WHERE r.[var] != 0 AND r.reqt_id = 4898
       ORDER BY r.inst_id DESC
FETCH NEXT FROM cursor_reqt_ids INTO @reqt_id --include this line so you can retrive next records and casuse the loop to terminate
 END

while ループ内でデータをフェッチしなかったため、ループは無限ループになり、 @@FETCH_STATUS がループを終了するために 1 になることはありません。

于 2013-07-30T12:08:37.393 に答える