我无法为我的问题提出有效的SQL查询,希望有人可以帮助我。
我有一个表(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
要将此表与其他表连接,我必须知道在特定时间范围内客户的有效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
可悲的是,我无法找到任何能够创建所需输出的SQL查询的解决方案:( 希望有人能帮助我
提前致谢
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
您可以像这样查询
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