Sim*_*rle 6 sql sql-server sybase
我有一个表(Sybase IQ),其中包含不同客户的数据及其在某个时间点的客户价值:
老客户价值表:
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
Run Code Online (Sandbox Code Playgroud)
要将此表与其他表连接起来,我必须知道特定时间范围内客户的有效 customer_value 是什么。所以我们的想法是改造上面的表并创建一个具有以下形式的新表:
要创建的新客户价值表
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
Run Code Online (Sandbox Code Playgroud)
遗憾的是,我找不到任何可以为我创建所需输出的 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
Run Code Online (Sandbox Code Playgroud)