4

私の問題に対して有効な 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クエリの解決策を見つけることができません:(誰かが私を助けてくれることを願っています

前もって感謝します

4

2 に答える 2

2

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
于 2016-12-15T14:52:16.407 に答える
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
于 2016-12-15T15:15:47.647 に答える