每个员工手里都有将近1W张卡片,每张卡片上都有一个id和一个值,这个值是float型的,想取到每个员工手中卡片上最大的那个值,并把这个卡片的id和值一起返回,最后就是有多少个员工就返回多少条记录。员工和员工之间没有任何联系。由于数据量很大,想问这类数据量很大的操作,应该怎么解决?或者说提高计算效率?

解决方案 »

  1.   

    最好用个辅助表,保存员工id和最大值,这样数据量就不大了
    要是一次性用sql处理数据,效率肯定不高,用户肯定接受不了
    类似我做的车流量报表,按年月日统计,一个月的数据量就上百万,一年就上亿,肯定不行,就每天汇总处理数据,1年365条记录怎么也不会慢
      

  2.   

    那表结构如果我们无权修改呢?只有一个select权限。
      

  3.   

    问 SQL 问题,连数据库都不告之,表结构也没有!假设你用的是 Oracle,并且假设这些字段,你试试看这个效率怎么样SELECT m.name, m.card_name, m.card_id
      FROM (SELECT t.name,          -- 员工姓名
                   t.card_name,     -- 卡名
                   t.card_id,       -- 卡号。t.card_value 卡的值
                   row_number() OVER(PARTITION BY t.name ORDER BY t.card_value DESC) AS rn
              FROM t_emp t) m
     WHERE m.rn = 1;
      

  4.   

    您好  您的意思是优化sql吧!   
    上面我问的问题是吧问题简单化了,实际上是:这个经理代表某市,组长代表该市的所有变电站,员工代表变电站下的所有主变,卡片代表主变每天的测点值(每天都有288个点生成),这个测点表是横纵结构的,一个表就有上千个字段,这个是实际的需求,说出来也没什么用。  
      

  5.   

    哦  对不起  用的就是oracle 表结构我也实在不知道该怎么往上贴
      

  6.   

    别忘了,你只有一个 SELECT 权限,除了在 SQL 想点办法之外,还要别人能想出什么办法?如果只能在 SQL 上想办法的话,由于 SQL 各种数据库的差异很大,那就得知道用的是什么数据库,以及表结构如何。
      

  7.   

    通过地市,能确定这个地市下有多少变电站,通过变电站也能确定这个变电站下有多少主变,每个主变都对应一个code字段,通过这个code和一个中间表,就能找到这个主变的测点放在哪个表的哪个字段中了。
    这个存放测点的表中的字段,id为测点的时间(格式为20090412000000),其余的就是tab1,tab2.tab956...   这些字段不表示什么意义,只用来存放测点值。这样说行吗?
      

  8.   

    不好意思你标题中已经说明了是 Oracle,抱歉!这个需求还涉及动态查找不同的表啊?
      

  9.   


    就多一张表啊,(select max(最大值) from 卡表 group by 员工id,结果集就插入该表 ),用sql就可以批量汇总,不要自己进行比较……9999个也就不到1秒!id 员工id 最大值
    1   11      99(比如这是员工11的最大值)
    2   12      88
    3   13      96
    4   14      90