PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Datumsaufteilung basierend auf dem Geschäftsjahr

Eigentlich bevorzuge ich die Lösung von Andomar (mit dem Hinzufügen eines Prozesses, der automatisch die Periodentabelle füllt), aber zum Spaß ist hier eine Lösung, die dies nicht erfordert.

CREATE TABLE your_table (start_date date, end_date date);
INSERT INTO your_table VALUES ('Jan-17-2008', 'May-20-2009');

SELECT
    GREATEST(start_date, ('04-01-'||series.year)::date) AS year_start,
    LEAST(end_date, ('03-31-'||series.year + 1)::date) AS year_end
FROM
    (SELECT
        start_date,
        end_date,
        generate_series(
            date_part('year', your_table.start_date - INTERVAL '3 months')::int,
            date_part('year', your_table.end_date - INTERVAL '3 months')::int)
    FROM your_table) AS series(start_date, end_date, year)
ORDER BY
    start_date;