羽竹w 发表于:2015-07-23 16:25:16
想在Access2007实现分组求中位数,单列求中位数已经实现了,但分组一直实现不了,求大神们帮忙看下小弟的程序哪出问题了?灰常感谢!(注:求的是日中位数(即一个ID号对应一天中间条记录的数值),下表“日平均体重”是上个求平均值的方案的名称,还未改过来,上个直接用聚合函数很容易出分组平均值,不过中位数就憋死我了
)
(这个结果是错误的)
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
偶数条就取中间两条的平均值,例如:有4条记录,取第二条记录和第三条记录的平均值!
非常感谢您的VBA代码@煮江品茶,想再次请教下咱们VBA在模块函数编完要在Access2007中怎么调用,小弟刚接触Access不久,近期只了解下“设计视图”和“SQL”,还没有VB调用这块经验,刚刚试了几种方法,还没成功!

,想再次麻烦下你,灰常感谢!

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