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

開始日と終了日に基づいて日間隔を含めて複数回レコードを表示する方法

    これは、再帰的な CTE を使用できるため、SQL Server では簡単です。 (実際、これらは Oracle 12C にもあるため、同じアプローチが機能します。)

    with CTE as (
          select event, startdate, enddate,
                 dateadd(day, 1 - day(startdate), startdate) as month_start
          from t
          union all
          select event, startdate, enddate,
                 dateadd(month, 1, month_start)
          from cte
          while month_start <= enddate
        )
    select event, month_start,
           ((case when eomonth(enddate) = eomonth(month_start) -- last month
                  then day(enddate)
                  else day(eomonth(month_start))
             end) -
            (case when month_start < startdate  -- first month
                  then day(startdate) - 1
                  else 0
             end)
           ) as days_in_month
    from cte;
      

    これにより、各イベントの日付範囲が月ごとに拡張されます。次に、その月の日数を計算します。

    デフォルトでは、これは最大 100 か月間有効です。 maxrecursion を使用できます さらに数か月のサポートが必要な場合は、オプションを選択してください。




    1. cronジョブで処理する新しいファイルを処理する方法

    2. クエリはWebアプリからタイムアウトしますが、ManagementStudioからは正常に実行されます

    3. CONNECT BYを使用して、階層クエリの各レベルでカウント/合計を取得する

    4. Django-ユーザー間で送信されるメッセージをマッピングする方法