sql >> Databáze >  >> RDS >> Sqlserver

Jak zobrazit záznam vícekrát včetně denních intervalů na základě data začátku a konce

To je v SQL Server jednodušší, protože můžete použít rekurzivní CTE. (Ve skutečnosti je máte také v Oracle 12C, takže stejný přístup funguje.)

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;

Tím se rozšíří časové období o měsíc pro každou událost. Poté vypočítá počet dní v měsíci.

Ve výchozím nastavení to bude fungovat až 100 měsíců. Můžete použít maxrecursion možnost, pokud potřebujete podporu na více měsíců.




  1. Vytvoření nové databáze a nového připojení v Oracle SQL Developer

  2. Jak vybrat maximálně 3 položky na uživatele v MySQL?

  3. MySQL Match Against s více hodnotami proti

  4. Přidejte sloupec do existující tabulky v SQLite