根据多个条件添加最小日期列

时间:2016-11-18 00:49:51

标签: mysql sql

我正在尝试向表中添加一列,该表显示第一个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

2 个答案:

答案 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;