两个日期之间在几个月内重复的值SQL

时间:2018-10-05 19:05:59

标签: sql

我有一张表格,其中的数据格式如下

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;

但是日期似乎不正确

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

返回数据,例如this 还有this