u011371270
漆黑天使复活
采纳率57.5%
2016-03-15 09:01 阅读 1.4k

MYSQL 一个比较复杂的查询语句咨询

100

hi 我的表的结构大致是这样的
项目编号 预计成交日期 状态更新日期 项目状态
lead-1 2016-6-4 2016-3-1 跟踪
lead-1 2016-6-5 2016-3-2 谈判中
lead-1 2016-7-5 2016-3-3 审核中
lead-2 2016-3-5 2016-3-1 跟踪
lead-2 2016-4-9 2016-3-2 审核中
想得到的结果是这样的
3月 4月 5月 6月 7月
跟踪 0 0 0 0 0
谈判中 0 0 0 0 0
审核中 0 1 0 0 1
或者 想这样的结果
月份 状态 数量
3月 跟踪 0
3月 谈判中 0
3月 审核中 0
4月 跟踪 0
4月 谈判中 0
4月 审核中 1
5月 跟踪 0
5月 谈判中 0
5月 审核中 0
6月 跟踪 0
6月 谈判中 0
6月 审核中 0
7月 跟踪 0
7月 谈判中 0
7月 审核中 1

就是我只统计每一个leadcode的最新状态的那一条数据,根据那一条数据的预计成交日和项目状态进行统计,统计的最终希望的结果如第二个表格或者第三个表格
这个东西,我主要是用来返回给前台给highchart画图用的。。我想把查询的结果json化之后,通过“data.项目状态.月份“或者“data.月份.项目状态”的形式来调用数据,可能做到吗?
非常感谢!

或者有别的思路可以实现差不多内容的也可以,拜托各位大神了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • lxh_5206 lxh_5206 2016-03-15 09:15

    就一个“状态更新日期”,某一天leadcode有几条记录,不同的状态,怎么去判断哪一条是最新的呢?

    点赞 评论 复制链接分享
  • danielinbiti danielinbiti 2016-03-15 09:59
     create table ta1(
      项目编号 varchar(50),
    预计成交日期 varchar(50),
    状态更新日期 varchar(50),
    项目状态 varchar(50)
    );
    create table monthtable(
      monthnum varchar(2)
    );
    insert into ta1(项目编号,预计成交日期,状态更新日期,项目状态) 
    values('lead-1','2016-6-4','2016-3-1','跟踪');
    insert into ta1(项目编号,预计成交日期,状态更新日期,项目状态) 
    values('lead-1','2016-6-5','2016-3-2','谈判中');
    insert into ta1(项目编号,预计成交日期,状态更新日期,项目状态) 
    values('lead-1','2016-7-5','2016-3-3','审核中');
    insert into ta1(项目编号,预计成交日期,状态更新日期,项目状态) 
    values('lead-2','2016-3-5','2016-3-1','跟踪');
    insert into ta1(项目编号,预计成交日期,状态更新日期,项目状态) 
    values('lead-2','2016-4-9','2016-3-2','审核中');
    
    insert into monthtable(monthnum) values('1');
    insert into monthtable(monthnum) values('2');
    insert into monthtable(monthnum) values('3');
    insert into monthtable(monthnum) values('4');
    insert into monthtable(monthnum) values('5');
    insert into monthtable(monthnum) values('6');
    insert into monthtable(monthnum) values('7');
    insert into monthtable(monthnum) values('8');
    insert into monthtable(monthnum) values('9');
    insert into monthtable(monthnum) values('10');
    insert into monthtable(monthnum) values('11');
    insert into monthtable(monthnum) values('12');
    
    
    
    SELECT b1.monthnum,b1.项目状态,ifnull(num,0) 数量 FROM (
    SELECT * FROM (
    select monthnum from  monthtable,(
    select max(mnum) mx,min(mnum) mm from (
     SELECT MONTH(str_to_date(预计成交日期,'%Y-%m-%d')) mnum from ta1
    ) r
    ) m where monthnum>=mm and monthnum<=mx
    ) a1,
    (
    select distinct 项目状态 from ta1
    ) a2
    ) B1
    left join (
    select R.*,MONTH(str_to_date(预计成交日期,'%Y-%m-%d')) monthnum,1 num from (
    SELECT @rownum1 rn ,@rownum1:=@rownum1+1,c.* from ta1 c,(select @rownum1:=1) r
    ) r,
    (
    select max(rn) rn1 from (
      SELECT @rownum rn,@rownum:=@rownum+1,c.* from ta1 c,(select @rownum:=1) r
    ) t group by 项目编号
    ) k where r.rn = k.rn1
    ) B2 on B1.monthnum=B2.monthnum and B1.项目状态=B2.项目状态
    order by B1.monthnum,B1.项目状态
    
    点赞 评论 复制链接分享

相关推荐