SQL :从一个日期列生成 valid_from 和 valid_to 日期

SQL : Generate a valid_from and valid_to date from one date column

我想不出一个有效的SQL查询来解决我的问题,希望有人能帮助我。

我有一个 table (Sybase IQ),其中包含不同客户的数据以及他们在某个时间点的客户价值:

老客户价值Table:

customer_id | load_date   | customer_value
5           |  2016-01-01 | Basic
5           |  2016-04-01 | Premium
5           |  2016-08-01 | Gold
6           |  2016-01-01 | Basic
6           |  2016-04-01 | Premium
6           |  2016-08-01 | Gold
7           |  2016-01-01 | Basic
7           |  2016-04-01 | Premium
7           |  2016-08-01 | Gold

要将此 table 与其他 table 加入,我必须知道在特定时间范围内客户的有效 customer_value 是什么。 所以想法是改造上面的table并创建一个具有以下形式的新table。:

要创造新的客户价值Table

customer_id | date_valid_from | date_valid_to | customer_value
5           |  2016-01-01     | 2016-03-31    | Basic
5           |  2016-04-01     | 2016-08-24    | Premium
5           |  2016-08-25     | NULL          | Gold
6           |  2016-01-01     | 2016-03-31    | Basic
6           |  2016-04-01     | 2016-08-24    | Premium
6           |  2016-08-25     | NULL          | Gold
7           |  2016-01-01     | 2016-03-31    | Basic
7           |  2016-04-01     | 2016-08-24    | Premium
7           |  2016-08-25     | NULL          | Gold

可悲的是,我找不到任何 sql 查询的解决方案来创建我想要的输出:( 希望有人能帮助我

提前致谢

使用 lead 获取下一行的日期,并从中减去 1 天以获得期间的结束日期。

select customer_id,date_valid_from,
dateadd(day,-1,next_date) date_valid_to,customer_value 
from (
select 
customer_id,
load_date as date_valid_from,
lead(load_date) over(partition by customer_id order by load_date) as next_date,
customer_value 
from tablename
) x

您可以这样查询

select customer_id, load_date as datefrom, 
 dateto= dateadd(day, -1, lead(load_date) over(partition by customer_id order by customer_id, load_date)) , customer_value 
 from yourCustomer