の値に基づいて1列でフィルタリングは、このようになりますこと、のTestTable、私はテーブルがあるとします。別
|-------------------|------------------|------------------|
| Id | EventDate | EventCode |
|-------------------|------------------|------------------|
| 1 | 2017-04-10 | 42 |
|-------------------|------------------|------------------|
| 2 | 2017-10-32 | 50 |
|-------------------|------------------|------------------|
| 3 | 2017-06-15 | 60 |
|-------------------|------------------|------------------|
| 4 | 2017-07-13 | 10 |
|-------------------|------------------|------------------|
私はEVENTCODE 60よりも後の日付で行われたイベントのみを選択します。もちろん、私は一時的な変数を作成し、WHERE句を使用できます。
DECLARE @TestEventDate DATETIME;
SET @TestEventDate =
(SELECT TOP 1 EventDate
FROM TestTable
WHERE EventCode = 60);
SELECT *
FROM TestTable
WHERE EventDate > @TestEventDate
をしかし、私は助けるが、複数のSELECT文を実行せずにこれを行う方法である必要があり、ここで考えることはできません。同じSELECT内で間接的にフィルタをかけて、一時変数を設定せずにwhere句のEventCodeにEventDateをマッピングすることはできますか?
あなたは自分のSSMSでまっすぐにそれを実行できるように、ここで一時テーブルに上記のセットがあります:
DECLARE @TestTable TABLE(Id INT, EventDate DATETIME, EventCode INT);
INSERT INTO @TestTable(Id, EventDate, EventCode) VALUES (1, '20170410', 42);
INSERT INTO @TestTable(Id, EventDate, EventCode) VALUES (2, '20171030', 50);
INSERT INTO @TestTable(Id, EventDate, EventCode) VALUES (3, '20170615', 60);
INSERT INTO @TestTable(Id, EventDate, EventCode) VALUES (4, '20170713', 10);
DECLARE @TestEventDate DATETIME;
SET @TestEventDate =
(SELECT TOP 1 EventDate
FROM @TestTable
WHERE EventCode = 60);
SELECT *
FROM @TestTable
WHERE EventDate > @TestEventDate
インデックスが良い230億行の場合はどうなりますか? @clementakis。 – clementakis
。 。新しい質問は質問ではなく、コメントでお願いします。 –