同じIDを持つTable1
の行数はいくつですか?私は2と仮定しますが、クエリは1または3+であっても合理的に動作します。
"は互いに続いています" - 2つの日付が同じでない限り、2つの日付はお互いに続くので、下の唯一の実際のチェックは不等式です。
"ブール値はfalseです" - ブール値が異なる2つのローがあります。私はそれらの両方が偽でなければならないと仮定します。 (偽真、0が1である)
サンプル・データ
これはあなたのサンプルデータがあなたの質問に提示する方法です。少なくともあなたは、何が月で、何が何であるかを推測する必要がないような方法で日付を書くべきです。 (ID, dt)
上Table2
上
DECLARE @Table1 TABLE (ID int, dt date, Flag bit);
INSERT INTO @Table1 (ID, dt, Flag) VALUES
(1, '2017-01-03', 'false'),
(2, '2017-01-03', 'true'),
(1, '2017-01-01', 'false'),
(2, '2016-12-10', 'false');
DECLARE @Table2 TABLE (ID int, dt date);
INSERT INTO @Table2 (ID, dt) VALUES
(1, '2017-01-03'),
(2, '2017-01-03'),
(1, '2017-01-02'),
(1, '2016-12-12');
クエリ
WITH
CTE
AS
(
SELECT
ID
,MIN(dt) AS StartDT
,MAX(dt) AS EndDT
,MAX(CAST(Flag AS int)) AS MaxFlag
FROM @Table1 AS Table1
GROUP BY ID
)
SELECT
CTE.ID
,A.dt
FROM
CTE
CROSS APPLY
(
SELECT
Table2.dt
FROM @Table2 AS Table2
WHERE
Table2.ID = CTE.ID
AND Table2.dt >= CTE.StartDT
AND Table2.dt <= CTE.EndDT
) AS A
WHERE
StartDT < EndDT -- "are following each other"
AND MaxFlag = 0 -- "the boolean is false" for both IDs
;
結果
+----+------------+
| ID | dt |
+----+------------+
| 1 | 2017-01-02 |
| 1 | 2017-01-03 |
+----+------------+
インデックスが大いに役立つでしょう。
サンプルテーブルのデータと予想される結果(書式付きテキスト)を追加してください。現在のクエリの試行も表示してください。また、使用しているDBMSにタグを付けます。 – jarlh
「表1の2つの連続する日付」は何を意味しますか? –
**あなたの質問に[編集] **し、いくつかのサンプルデータとそのデータに基づいて予想される出力を追加します。 [**フォーマットされたテキスト**](http://stackoverflow.com/help/formatting)、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-ask-a-question/285557#285557) –