我有一张表格,其中的数据格式如下
Account_number Start_date End_date
1 20/03/2017 09/07/2018
2 15/12/2017 08/12/2018
3 01/03/2017 01/03/2017
我想要下面的结果
Account_number Start_date End_date Balance_date
1 20/03/2017 9/07/2018 31/03/2017
1 15/12/2017 08/12/2018 30/04/2017
1 01/03/2017 01/03/2017 31/05/2017
1
1
1 20/03/2017 09/07/2018 09/07/2018
,并复制了所有其他account_numbers 结帐日期应为起始日期和结束日期之间的每个月的最后一天
我正在使用此查询:
select
account_number,
start_date,
end_DATE,
last_day(TO_CHAR( ADD_MONTHS( START_DATE, LEVEL-1 ) )) as balance_date
from table
connect by level <= ceil(months_between(
(start_date),
(end_date)) )
* + 1;
但是日期似乎不正确
答案 0 :(得分:0)
正如其他一些用户所提到的那样,预期的结果并不十分清楚,但我认为我完全符合您的要求。我也不知道您在使用什么数据库,但是我知道如何在PostgreSQL中使用generate series和一些日期操作来做到这一点。这可能不容易移植到postgres以外的数据库中。
CREATE TABLE foo(
account_number INTEGER, start_date DATE, end_date DATE
)
INSERT INTO foo VALUES
(1, '2017-03-20','2018-07-09'),
(2, '2017-12-15','2018-12-08'),
(3, '2017-03-01','2017-03-01')
WITH q1 AS(
select
account_number,
start_date,
end_DATE,
generate_series(start_date, end_date, '1 day') AS day_interval
from foo
)
SELECT account_number, start_date, end_date,day_interval, date_trunc('month', day_interval + INTERVAL '1 month') - INTERVAL '1 day' balance_date
FROM q1