SQL Serverクエリの効率化に関する質問があります。サブクエリを使用するクエリのクリーンアップ
私は値がゼロより大きい日から各IDの行を選択したい、次の列
ID int
ValueDate datetime
Value float
を持つテーブルがあります。これは私が思い付いたSQLです
SELECT a.ID, a.ValueDate, a.Value
FROM MyTable a,
(SELECT ID, MIN(ValueDate) as VDate FROM MyTable WHERE Value > 0 GROUP BY ID) B
WHERE a.ID = b.ID and a.ValueDate >= b.VDate
これはうまくいきますが、もっと効率的な方法があるのでしょうか?私は特に、サブクエリで単一のテーブルを置き換える必要があるため、他のフォームを調べることに興味があります。私は、クエリが同じサブクエリを2回実行すると実行が遅くなるため、クエリには2度の不安があることを心配しています。サブクエリが1回だけ実行されるようにクエリを調整する必要はありますか。これは、OracleとAccessデータベースでクエリを実行する必要があるため、他の2つのデータベースシステムで同等のものが存在しない限り、SQL Server固有のものは使用できません。
「ID」は一意ではありませんか?私には明らかになぜ 'GROUP'を使用するのですか – anatol
単にSELECT a.ID、a.ValueDate、a.Value FROM MyTable a WHERE a.Value> 0'を使わないのはなぜですか? – anatol
anatol --- IDと日付の列が一意のキーを構成します。最初の非ゼロ値で始まるデータを収集したいのでGROUP BYを使用しますが、その後にゼロ値がある場合はそれを保持する必要があります。 – user1753352