给定“起始日期”,“截止日期”和“会计年度”系统,我想获得
根据“会计年度”系统给出“从&到日期”。下面用示例说明:
示例1:
会计年度制:4月至3月
起始日期:2008年1月5日
迄今为止:2008年5月15日
根据会计年度系统,工期应分为:
Jan-05-2008 to Mar-31-2008
Apr-01-2008 to May-15-2008
示例2:
会计年度制:4月至3月
起始日期:2008年1月17日
迄今为止:2009年5月20日
根据会计年度系统,工期应分为:
Jan-17-2008 to Mar-31-2008
Apr-01-2008 to Mar-31-2009
Apr-01-2009 to May-20-2009
我正在寻找方法/算法来解决PostgreSQL 8.2中的问题。
问候,
加纳姆
最佳答案
我实际上很喜欢Andomar的解决方案(添加了自动填充Periods表的流程),但出于乐趣,这里的解决方案不需要它。
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;