sql >> Databasteknik >  >> RDS >> PostgreSQL

Datumuppdelning baserat på räkenskapsår

Jag föredrar faktiskt Andomars lösning (med tillägg av en process som automatiskt fyller tabellen Perioder), men för skojs skull är här en lösning som inte kräver det.

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;


  1. Uppföljningsgräns och kompensera felaktig placering i frågan

  2. mysql select query optimering och hur limit fungerar i mysql

  3. Hur undkommer man strängar i SQL Server med PHP?

  4. Kan inte använda postgres-användare i ny databas för rails 3 på ubuntu 10.04-servern