私は2つのテーブルを持っています。各ウィジェットに関する情報 (色、サイズなど) を含むウィジェット。各ウィジェットには一意の ID、WidgetID があります。
もう 1 つのテーブルは Tests で、各ウィジェットで実行された複数のテストに関する情報が含まれています。したがって、このテーブルには、WidgetID ごとに複数の行があります。呼び出すことができる情報 (WidgetID、Date、Param1、Param2 など) が含まれています。テスト情報。
WidgetID ごとに、最新の 2 つのテストを日付別に検索するクエリを作成しました。SQL は次のようになります。
SELECT Widgets.WidgetID, Widgets.Color, Widgets.Size, T.Date, T.Param1, T.Param2,*
FROM Tests AS T INNER JOIN Widgets ON T.WidgetID=Widgets.WidgetID
WHERE (((COUNT(*) を選択) FROM テスト
WHERE WidgetID = T.WidgetID AND Date > T.Date)) < 2 );
これは非常にうまく機能します。ただし、ウィジェットが多すぎます。WidgetFilter というウィジェットをフィルタリングするクエリを作成しました。基本的には、私が選択したものに基づいて、必要なものを選択するだけです。上記のコードの「Widgets」を「WidgetFilter」に置き換えて、同じクエリを実行するというアイデアでした。ただし、これを行うと、永遠にかかります。実際、それはただフリーズします。私はそれを1時間半放置しましたが、そこに座っていたので、ctl deleteをaltする必要がありました. 私の唯一の考えは、テストのすべての行(およびそれは多くの行)に対して WidgetFilter クエリをクエリしていることです。また、元のクエリ内でフィルター基準を適用してみました。同じ結果が得られます。
これを行うより良い方法はありますか?それをすべて実行し、おそらくこのように見えない単一のクエリ、または私が考えていたのは、WidgetFilterクエリを1回実行して、そのデータをテーブルのようにアクセスするように見せる方法があるはずです(そのようなものはありません一時テーブル)。そうすれば、テストのすべてのアイテムに対して WidgetFilter を実行しません。
編集:
WidgetFilter は実際にはかなり複雑です。ユーザーに 2 つの列が表示されるこれらの GUI ピック テーブルを作成しました。左側に選択肢、右側に作成中のリスト、中央に追加ボタンと削除ボタンがあります。次に、WidgetFilter、yadda yadda yadda を実行するレポートを呼び出します。とにかく、ユーザーがアイテムを追加すると、そのアイテムがテーブルに追加されます。したがって、ウィジェット カテゴリの Color には、ColorList というテーブルがあります。ユーザーは、GUI を使用してこのリストを作成します。これらの gui には 3 つ (色、サイズ、タイプ) があります。それらのそれぞれにテーブルがあり、次に使用するフィルター (Color、Size、または Type) を示す Global boolean (ColorFlag など) があります。
したがって、WidgetFilter クエリでは、[色] の下の基準ボックスに次のように表示されます。
In(Select Color From ColorList)
には、グローバル変数 ColorFlag の値を返すモジュールである式列 Expr1: getColorFlag() があります。カラーテーブルが適用されると同時に真になります。したがって、すべてを言い終えると、3 行の基準があります。コードは次のようになります。
ウィジェットからWidgets.WidgetID、Widgets.Color、Widgets.Size、Widgets.Type を
選択し
ます。 Size) In(Select Size FROM SizeList))
OR (getTypeFlag() = True AND (Widgets.Type) In(Select Type FROM TypeList))