2016-11-18 70 views
0

我想向第一个金额点击时显示每个销售ID的日期的表添加一列。实质上,我需要一个列,显示每个ID的第一个月,其中金额不是0或空值,我需要将其扩展为该销售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; 

注意> 0也消除NULL值。

可以纳入与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

使用相关子查询来获取第一日期为每个sales_id其中所述的量是> 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 

另一个选项是派生表,每个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