2016-12-15 11 views
3

問題の有効なSQLクエリを思いつくことができず、誰かが私を助けてくれることを願っています。SQL:1つの日付列からvalid_fromとvalid_to日付を生成

私は、ある時点から別の顧客とその顧客価値のためのデータを含むテーブル(の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が何かを知る必要があります。 だから、アイデアは上記の表を変換し、次の形式で新しいテーブルを作成することでした。:

新しい顧客価値表悲しいことに、私は、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 

を作成するにはそれは私に所望の出力を作成します:( ホープ誰かが次の行に日付を取得し、電子を得るためにそれから1日を減算する私に、事前

+0

のように問い合わせることができますか?あなたの質問でそれを計算するための適切な定義がないので。 – Viki888

+0

SQL Serverのバージョンとは何ですか?それがSQL Server 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 
関連する問題