2 u011371270 u011371270 于 2016.03.15 17:01 提问

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

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 17:15

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

danielinbiti
danielinbiti   Ds   Rxr 2016.03.15 17: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.项目状态
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!