我正在尝试向表中添加一列,该表显示第一个Amount点击时每个销售ID的日期。基本上,我需要一个列,显示每个ID的第一个月,其中金额不是0或Null,我需要它来扩展该销售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
答案 0 :(得分: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
答案 1 :(得分: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;