1.有一合同表和合同变更表 结构如下
  合同表:
    contract_id(合同主键:随机产生)  contract_amount(合同金额)  contract_state(合同状态) contract_com(所属单位)
           1001                           10.50                        6                        1
           1002                           5.50                         6                        2
  合同变更表
change_id(变更主键)  contract_id(合同外键)  change_amount(变更后金额)  change_time(变更时间) change_state(状态)
  1                        1001                   10                        2009-10-05            2
  2                        1001                   11                        2009-11-05            6
  3                        1002                   6                         2009-11-05            2
  4                        1002                   7                         2009-10-10            6
  5                        1002                   7.5                       2009-11-05            6
  6                        1001                   11.5                      2009-11-15            6说明:
   两表的状态为审核状态(状态6为审核通过),在合同的金额发生变化时,首先根据当前时间的年月查询出变更表中是否存在与该合同匹配的变更记录,也就是一个合同在变更表中在某一月只能存在一条变更记录,若查询无,就插入一条变更记录,若查询有就更新当前记录
要求如下:
  查询条件:2009-10-01至2009-12-01  根据所属单位分组,统计出该单位下的被审核通过的合同总数和合同总金额(对应的变更金额且变更记录必须是该时间段最后一次变更记录).2 有一个企业信息表和企业认证信息表 表结构如下:
  企业信息表                                       企业认证信息表
  com_id(企业主键,随机生成) com_name(企业名称)    com_id(企业外键)   cmm(int)    cmmi(int)  other(varchar) 
   1001                        企业1                 1001               -1           2            1,2,3
  要求:
  统计出企业信息及对应认证信息的认证个数
  当cmm的值>0时认证个数加1,cmmi同理;other的值根据","分割 取出分割后的总数并 认证个数=认证个数+总数有高手帮忙提示下,万分感谢!!!    

解决方案 »

  1.   

    查询条件:2009-10-01至2009-12-01  根据所属单位分组,统计出该单位下的被审核通过的合同总数和合同总金额(对应的变更金额且变更记录必须是该时间段最后一次变更记录). -------------
    找出“合同变更表”中按这个日期范围内的每个单位的最后那条更改记录然后与“合同表”进行左联接就可以了 统计出企业信息及对应认证信息的认证个数 
      当cmm的值>0时认证个数加1,cmmi同理;other的值根据","分割 取出分割后的总数并 认证个数=认证个数+总数 
    ---------------------------------
    “当cmm的值>0时认证个数加1,cmmi同理”这个用case来判断处理+1或+0就可以了;other的值要自己写个函数来根据分割符取值累加就可以了。
      

  2.   

     非常感谢您的耐心分析,思路我也是有一点点,就是写的时候就卡住了,不知道怎么下手,本人接触mysql不久,水平有限,还望高手能写下,急用中,绝对给分。谢谢各位了!
      

  3.   

      新人能知道给分,应该是看过帮助了。建议你给出你的 create table  / insert into 语句。这样别人可以直接搭建与你相同的环境来测试。建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
      

  4.   

    谢谢楼上!
    1. 合同表   
    CREATE TABLE `contract` (
      `contract_id` varchar(20) NOT NULL,
      `id` varchar(20) default NULL,
      `companyname` varchar(50) default NULL,
      `contracting_name` varchar(50) default NULL,
      `contracting_englishname` varchar(50) default NULL,
      `contracting_regplace` int(4) default NULL,
      `contracting_istran` int(4) default NULL,
      `contracting_real_name` varchar(50) default NULL,
      `contracting_real_englishname` varchar(50) default NULL,
      `contracting_real_regPlace` int(4) default NULL,
      `contracting_real_istran` int(4) default NULL,
      `contract_name` varchar(50) default NULL,
      `contract_englishname` varchar(50) default NULL,
      `contract_number` varchar(20) default NULL,
      `profession_type` int(4) default NULL,
      `signa_time` datetime default NULL,
      `contract_period` int(4) default NULL,
      `contract_content` varchar(500) default NULL,
      `itotype` varchar(20) default NULL,
      `bpotype` varchar(20) default NULL,
      `softtype` varchar(20) default NULL,
      `kpotype` varchar(20) default NULL,
      `other_service` varchar(200) default NULL,
      `contract_amount` varchar(20) default NULL,
      `contract_amount_dollar` varchar(20) default NULL,
      `contract_writer` varchar(20) default NULL,
      `isonshore` int(4) default NULL,
      `state` int(4) default NULL,
      `fillin_time` datetime default NULL,
      PRIMARY KEY  (`contract_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;合同变更表
    CREATE TABLE `contract_change` (
      `id` int(11) NOT NULL auto_increment,
      `contract_id` varchar(20) default NULL,
      `change_berfroe` varchar(20) default NULL,
      `change_after` varchar(20) default NULL,
      `change_cause` varchar(500) default NULL,
      `change_time` datetime default NULL,
      `change_state` int(11) default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=432 DEFAULT CHARSET=utf8;
      
      

  5.   

    2.企业认证信息表
    CREATE TABLE `company_certificate` (
      `id` varchar(20) NOT NULL default '',
      `cmm` int(4) default NULL,
      `certime_cmm` datetime default NULL,
      `cmmi` int(4) default NULL,
      `certime_cmmi` datetime default NULL,
      `othercer` varchar(10) default NULL,
      `othercer_str` varchar(10) default NULL,
      `certime_other` datetime default NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
      

  6.   

    呵呵!~我也在找一个能多表查询又能统计东东出来的SQL  有朋友说,应该用两个SQL来查……