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
我想不出一个有效的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