以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求高效代码 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41434) |
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 9:34:00 -- 求高效代码 我写的一段按月逐日累计在职人数,再计算当月平均人数,求12月平均数之和的代码,非常低效,1000人时要3秒,400人时要0.3秒 求高效代码!开发版,谢谢!
|
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 9:56:00 -- 狐爸,有没有办法呀? |
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 9:59:00 -- 以下是我的代码,不知道还有没有更简洁高效的办法,实际应用统计时,再加上其他条件,再放到循环体里,统计一张表需要100秒了 Dim ts As Integer \'当月天数 Dim kssj As Date=#01/01/2013# Dim monavg As Double \' 月平均人数 Dim ST As Date=Date.NOW Dim RS As Integer For m As Integer=0 To 11 \'月 ts= ts+Date.daysinmonth(kssj.year, kssj.month) For t As Integer=1 To Date.daysinmonth(kssj.year,kssj.month) \'从开始时间起逐天计算 rs=rs+DataTables("zzjbqk").compute("count(姓名)","[工资类型] like \'机关%\' And [单位代码] Like \'SZ0306\' and [调入时间]<#"& kssj &"#") \'逐天累加人数至全月 kssj = kssj.adddays(1) Next monavg=monavg+rs/ts\'逐月平均人数和 ts=0 If kssj>#12/21/2013# Then \'如果开始时间>截止时间 Exit For End If rs=0 Next MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") |
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 10:03:00 -- 这是年末机关事业单位年报统计表上的一个必填数据,多张表上都有,并且还要根据人员的职务层次详细统计。相信好多人都要用的,还烦请狐爸帮忙看看!指点下。 |
||||
-- 作者:blackzhu -- 发布时间:2013/10/19 10:12:00 -- 你这个计算个啥呀,就计算个时间? |
||||
-- 作者:blackzhu -- 发布时间:2013/10/19 10:40:00 -- Dim ST As Date=Date.NOW Dim Val As Double Dim rs As Double Dim y As Integer = Date.Today.Year For m As Integer = 1 To 12 Dim dt1 As New Date(y, m, 1) Dim dt2 As New Date(y, m,Date.DaysInMonth(y,m)) Val = DataTables("zzjbqk").compute("count(姓名)","[工资类型] like \'机关干部\' And [单位代码] Like \'SZ0306020000\' And [调入时间]>= # " & dt1 & "# And 调入时间<= #" & dt2 & "#") \'逐天累 Output.Show(dt1.Month & "月份" & "|" & dt1.day & "天" & Val & "人数") Next 是这个意思不?
|
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 11:41:00 -- 算的是逐月平均人数之和 |
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 11:48:00 -- 12个月平均人数和:1月:sum(每天的人数)/当月的天数+2月份。。。+12月 |
||||
-- 作者:jsq96jg -- 发布时间:2013/10/19 11:57:00 -- 看来这个问题还真有点棘手 |
||||
-- 作者:blackzhu -- 发布时间:2013/10/19 13:01:00 -- 那我的代码改改就行了呗 |