每个员工手里都有将近1W张卡片,每张卡片上都有一个id和一个值,这个值是float型的,想取到每个员工手中卡片上最大的那个值,并把这个卡片的id和值一起返回,最后就是有多少个员工就返回多少条记录。员工和员工之间没有任何联系。由于数据量很大,想问这类数据量很大的操作,应该怎么解决?或者说提高计算效率?
解决方案 »
- jpa一对多条件查询
- 求助,如何将下面的SQL语句用hibenrate执行
- java中静态方法调用非静态变量的问题
- 关于java支持unicode,请指点!
- 请问:怎么设置JDK的环境变量?是修改某个文件,还是在“设置环境变量”中设置?怎么设置?谢了
- 用SOCKET连接通信时出现方格,不是中文输入的问题
- 我的jbuilder7在编辑状态时总是一闪一闪的,怎么解决?
- 可能是最简单的问题
- 非常怪异的double相加,难道这是Sun java的一个bug?但愿不是,谁知道,这200分就给您了
- 如何通过js改变onfocus的WdatePicker的属性
- 如何动态显示页面内容?
- 如何模拟用户点击登陆网址
要是一次性用sql处理数据,效率肯定不高,用户肯定接受不了
类似我做的车流量报表,按年月日统计,一个月的数据量就上百万,一年就上亿,肯定不行,就每天汇总处理数据,1年365条记录怎么也不会慢
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;
上面我问的问题是吧问题简单化了,实际上是:这个经理代表某市,组长代表该市的所有变电站,员工代表变电站下的所有主变,卡片代表主变每天的测点值(每天都有288个点生成),这个测点表是横纵结构的,一个表就有上千个字段,这个是实际的需求,说出来也没什么用。
这个存放测点的表中的字段,id为测点的时间(格式为20090412000000),其余的就是tab1,tab2.tab956... 这些字段不表示什么意义,只用来存放测点值。这样说行吗?
就多一张表啊,(select max(最大值) from 卡表 group by 员工id,结果集就插入该表 ),用sql就可以批量汇总,不要自己进行比较……9999个也就不到1秒!id 员工id 最大值
1 11 99(比如这是员工11的最大值)
2 12 88
3 13 96
4 14 90