Foxtable(狐表)用户栏目专家坐堂 → 求高效代码


  共有4770人关注过本帖树形打印复制链接

主题:求高效代码

帅哥哟,离线,有人找我吗?
有点甜
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/19 21:48:00 [只看该作者]

 图片点击可在新窗口打开查看 哎,好蛋疼的需求,想了几小时,应该正确了,楼主你自己调整一下细节。

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
Dim month As Integer = 0
Dim day As Integer = 0
Dim precount As Integer = DataTables("zzjbqk").Compute("count(_Identify)", "调入时间 < #" & kssj & "#")
Dim count As Integer = precount
Dim sum As Integer = 0
Dim drs As List(of DataRow) = DataTables("zzjbqk").Select("调入时间 >= #" & kssj & "# and 调入时间 < #" & kssj.AddYears(1) & "#", "调入时间")
Dim idx = 0
For Each dr As DataRow In drs
    idx += 1
    If dr("调入时间").month <> month OrElse idx = drs.Count Then '进入了下一个月
        If day = 0 Then '上个月只有记录
            For i As Integer = 1 To dr("调入时间").month - month -1
                sum += count * Date.daysinmonth(kssj.year, i+month)
                monavg = monavg + sum / Date.daysinmonth(kssj.year, i+month)  '逐月平均人数和
                output.show(i & ":" & sum)
                sum = 0
            Next
        Else
            ts = Date.daysinmonth(kssj.year, month+1)
            
            If day <> ts Then
                sum += count * (ts - day + 1)
            End If
            monavg = monavg + sum / Date.daysinmonth(kssj.year, month+1)  '逐月平均人数和
            output.show(month & ":" & sum)
            sum = count
        End If
        month = dr("调入时间").month
        day = 0
    Else
        If dr("工资类型").startswith("机关") AndAlso dr("单位代码").startswith("SZ0306") Then
            If dr("调入时间").day <> day Then
                sum += count * (dr("调入时间").day - day) + 1
                count += 1
                day = dr("调入时间").day
            Else
                count += 1
                sum += 1
            End If
        End If
    End If
Next
For i As Integer = month+1 To 12
    sum += count * Date.daysinmonth(kssj.year, i)
    monavg = monavg + sum / Date.daysinmonth(kssj.year, i)  '逐月平均人数和
    output.show(i & ":" & sum)
    sum = count
Next

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

 回到顶部
帅哥哟,离线,有人找我吗?
jsq96jg
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:333 积分:2759 威望:0 精华:0 注册:2012/5/8 11:06:00
  发帖心情 Post By:2013/10/20 15:42:00 [只看该作者]

哈哈,有点甜的代码是真快,比我按狐爸思路改的还要快!严重感谢有点甜!

代码真的好复杂,狐爸,如果能想办法把优化compute函数,一定能极大提高统计速度的。期待中......


 回到顶部
总数 22 上一页 1 2 3