Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

Access2007分组求中位数

羽竹w  发表于:2015-07-23 16:25:16  
复制

想在Access2007实现分组求中位数,单列求中位数已经实现了,但分组一直实现不了,求大神们帮忙看下小弟的程序哪出问题了?灰常感谢!(注:求的是日中位数(即一个ID号对应一天中间条记录的数值),下表“日平均体重”是上个求平均值的方案的名称,还未改过来,上个直接用聚合函数很容易出分组平均值,不过中位数就憋死我了

(这个结果是错误的)

 

Top
煮江品茶 发表于:2015-07-23 17:35:33
Public Function GetMedian(ByVal tbname As String, ByVal wh As String, ByVal fieldname As String) As Double
    '功能:返回中位数
    '参数:tbname -- 表或查询名称
    '      wh -- 筛选条件
    '      fieldname -- 求中位数的字段名称
    Dim rs As New ADODB.Recordset
    Dim ssql As String
    Dim i As Long
    Dim cnt As Long
    Dim d As Double
    
    ssql = "select " & fieldname & " from " & tbname & " where " & wh & " order by " & fieldname
    rs.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
    cnt = rs.RecordCount
    If cnt Mod 2 = 0 Then
        '记录条数为偶数取中间两个数字的平均数
        i = Int(cnt / 2)
        rs.Move i
        d = rs.Fields(fieldname).Value
        rs.MoveNext
        d = d + rs.Fields(fieldname).Value
        d = d / 2
    Else
        '记录条数为奇数取中间数字
        i = Int(cnt / 2) + 1
        rs.Move i
        d = rs.Fields(fieldname).Value
    End If
    rs.Close: Set rs = Nothing
    GetMedian = d
End Function




羽竹w 发表于:2015-07-23 17:56:04
偶数条就取中间两条的平均值,例如:有4条记录,取第二条记录和第三条记录的平均值!

羽竹w 发表于:2015-07-23 20:40:18
非常感谢您的VBA代码@煮江品茶,想再次请教下咱们VBA在模块函数编完要在Access2007中怎么调用,小弟刚接触Access不久,近期只了解下“设计视图”和“SQL”,还没有VB调用这块经验,刚刚试了几种方法,还没成功!,想再次麻烦下你,灰常感谢!

总记录:3篇  页次:1/1 9 1 :