2016-12-15 6 views
3

내 문제에 대해 유효한 SQL 쿼리를 만들 수 없으며 다른 사람이 저를 도울 수 있기를 바랍니다.SQL : 한 날짜 열에서 valid_from 및 valid_to 날짜를 생성하십시오.

나는 다른 고객의 데이터와 시간의 특정 지점에서 자신의 고객 가치를 포함하는 테이블 (사이베이스 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가 무엇인지 알아야합니다. 그래서 아이디어는 슬프게도 나는 SQL 쿼리에 대한 해결책을 찾을 수 없습니다 위의 표를 변환하고

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 

을 만들려면 다음과 같은 형식 :

새로운 고객 가치 테이블과 새 테이블을 만드는 것이 었습니다 그 희망 누군가가 전자를 얻을 수에서 다음 행에 날짜를 얻을 일일 빼기 위해 사전

+0

처럼 조회 할 수 있습니다? 귀하의 질문에 그것을 계산하기위한 적절한 정의가 없기 때문입니다. – Viki888

+0

SQL Server 버전이란 무엇입니까? 그것이 SQL 서버 2012라면 윈도우 기능을 사용할 수 있습니다 리드/지연 –

답변

1

사용 lead 나에게

덕분에 도움이 나에게 원하는 출력을 :(생성 기간의 날짜.

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 
+0

와우! 고마워요, 그게 내가 찾고 있었던 바로 그거야. –

0

당신은 어떻게`date_valid_to` 필드를 계산하기 위해이

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