2016-11-18 3 views
0

最初の金額がヒットしたときに各販売IDの日付を示す列をテーブルに追加しようとしています。基本的には、金額が0でない各IDの最初の月またはNullを示す列が必要です。そのSales IDのすべてのエントリに対して拡張する必要があります。 私はさまざまなものを試しましたが、すべての基準を考慮に入れる方法を理解できません。複数の条件に基づいて最小日付列を追加します

例データセット

Sales ID   Date  Amount 
0061600000g0jXOAAY 1-Nov-15 0 
0061600000g0jXOAAY 1-Dec-15 0 
0061600000g0jXOAAY 1-Jan-16 1479.01 
0061600000g0jXOAAY 1-Feb-16 1479.01 
0061600000hSBQVAA4 1-Feb-15 0 
0061600000hSBQVAA4 1-Mar-15 0 
0061600000hSBQVAA4 1-Apr-15 1098.18 
0061600000hSBQVAA4 1-May-15 2890 

所望のデータセット

Sales ID   Date Amount  Start Month 
0061600000g0jXOAAY 1-Nov-15 0   1-Jan-16 
0061600000g0jXOAAY 1-Dec-15 0   1-Jan-16 
0061600000g0jXOAAY 1-Jan-16 1479.01  1-Jan-16 
0061600000g0jXOAAY 1-Feb-16 1479.01  1-Jan-16 
0061600000hSBQVAA4 1-Feb-15 0   1-Apr-15 
0061600000hSBQVAA4 1-Mar-15 0   1-Apr-15 
0061600000hSBQVAA4 1-Apr-15 1098.18  1-Apr-15 
0061600000hSBQVAA4 1-May-15 2890  1-Apr-15 

答えて

1

あなたは容易に集計クエリを使用して開始月を計算することができます

select sales_id, min(date) 
from t 
where amount > 0 
group by sales_id; 

注意> 0NULL値を排除していること。

あなたはjoinまたは相関サブクエリで設定し、ご希望の結果にこれを組み込むことができます。

select t.*, mindate 
from t join 
    (select sales_id, min(date) as mindate 
     from t 
     where amount > 0 
     group by sales_id 
    ) tt 
    on t.sales_id = tt.sales_id; 
1

量が> 0

select sales_id,date,amount, 
(select min(date) from t where sales_id=t1.sales_id and amount > 0) start_month 
from t t1 
ある各sales_idの最初の日付を取得するために、相関サブクエリを使用し

別のオプションは、各IDに対して最小の日付を持つ派生テーブルです。

select t1.sales_id,t1.date,t1.amount,m.min_date 
from t t1 
join (select sales_id,min(date) min_date from t where amount > 0 group by sales_id) m 
on m.sales_id=t1.sales_id 
関連する問題