sql >> データベース >  >> RDS >> Sqlserver

SQLServerに存在しないレコードを選択する方法

    これは、再帰的なCTE<を使用して行うことができます。 / a> 。このようなもの:

    DECLARE @startDate datetime = '2/1/2014'
    DECLARE @endDate datetime = '2/6/2014'
    
    ;WITH DateRange(RunningDate) AS
    (
        SELECT @startDate AS RunningDate
        UNION ALL
        SELECT RunningDate + 1
        FROM DateRange
        WHERE RunningDate < @endDate
    )
    
    SELECT id, RunningDate date, value1, value2 
    FROM DateRange LEFT JOIN myTable ON myTable.date = DateRange.RunningDate
    

    編集... このソリューションを使用する場合(私の回答の下にあるAaron Bertrandのコメントに注意してください)、最大再帰 3か月を超える範囲を処理する場合。デフォルトは100に設定されています。これは、クエリが現在記述されているため、最大101の日付(100レベルの再帰)のみを実行することを意味します。

    さらに、OPTION (MAXRECURSION 0)を指定できます。 最後のSELECTの最後 これを克服するために。 0は、再帰の無限レベルを意味します。しかし、繰り返しになりますが、アーロンの投稿に注意してください。



    1. SQLAlchemyでサブクエリを使用して移動平均を生成するにはどうすればよいですか?

    2. 任意の時間間隔の集計を取得します

    3. MariaDBでのINSTR()のしくみ

    4. MySQLのネストされたCASEステートメント