473,463 Members | 1,536 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

Mass calculate MEDIAN of large data set

157 100+
Hello!

I have a table wich contains product number and different time date attachet pr product number.

Today we have used to calculate MEAN to get an average time consumed pr product. We have now learned that MEDIAN would give us more quality data since we sometimes have abnormalities on time consumed.

However. Access 2007 does not seem to have a MEDIAN function, and when i google it i only find code to do this for an entire dataset.

I have 10000 different products in the table, all with 10-50 time consumed rows. I also need to update our MEDIAN time consumed data pr product a couple of times a day. If i should use the code that M$ provides i have to close and open a connection to the table 10000 to get the results that i want

http://support.microsoft.com/kb/q95918/

Anybody have seen another solution for this?
Jan 28 '10 #1

✓ answered by ADezii

Here is a little Function that I created that is used within the context of a Calculated Field in a DISTINCT Query. In this particular case, it accepts two Arguments: Distinct Field and Field to calculate the actual Median Value. In this specific instance, I calculated the Median Value for properties by Area. I'll post the SQL, Function Definition, Sample Data, and Query Execution results for clarification.
  1. SQL Statement
    Expand|Select|Wrap|Line Numbers
    1. SELECT DISTINCT tblValues.Area, fCalculateMedian([Area],[Price]) AS Median
    2. FROM tblValues
    3. ORDER BY tblValues.Area;
  2. Function Definition
    Expand|Select|Wrap|Line Numbers
    1. Public Function fCalculateMedian(strArea As String, curPrice As Currency)
    2. Dim MyDB As DAO.Database, MyRS As DAO.Recordset, MySQL As String
    3. Dim intNumOfRecords As Integer, curPriceValue As Currency
    4.  
    5. MySQL = "SELECT tblValues.Area, tblValues.Price FROM tblValues "
    6. MySQL = MySQL & "WHERE tblValues.Area='" & strArea & "' ORDER BY tblValues.Area, tblValues.Price;"
    7.  
    8. Set MyDB = CurrentDb()
    9. Set MyRS = MyDB.OpenRecordset(MySQL, dbOpenSnapshot)
    10.  
    11. MyRS.MoveLast: MyRS.MoveFirst
    12.  
    13. intNumOfRecords = MyRS.RecordCount
    14.  
    15. If intNumOfRecords = 0 Then
    16.   fCalculateMedian = Null
    17.     Exit Function
    18. End If
    19.  
    20. If intNumOfRecords Mod 2 = 0 Then       'Even number of Records
    21.   MyRS.Move (intNumOfRecords \ 2) - 1   'Move half-way point
    22.     curPriceValue = MyRS![Price]        '1st value to average
    23.   MyRS.MoveNext
    24.     curPriceValue = curPriceValue + MyRS![Price]               '2nd value to average added to 1st value
    25.     fCalculateMedian = Format$(curPriceValue / 2, "Currency")  'Average them out
    26. Else   'Odd number of Records
    27.   MyRS.Move (intNumOfRecords \ 2)
    28.   fCalculateMedian = Format$(MyRS![Price], "Currency")
    29. End If
    30.  
    31. MyRS.Close
    32. End Function
  3. Values in tblValues
    Expand|Select|Wrap|Line Numbers
    1. Area            Price
    2. California      $100,000.00
    3. California      $150,000.00
    4. California      $120,000.00
    5. New York        $110,000.00
    6. New York         $20,000.00
    7. New York        $150,000.00
    8. New York        $120,000.00
    9. Philadelphia    $300,000.00
    10. Philadelphia    $100,000.00
    11. Philadelphia    $200,000.00
    12. Philadelphia    $116,000.00
    13. Philadelphia     $90,000.00
    14. California       $38,000.00
    15. Trenton              $0.00
  4. Query results
    Expand|Select|Wrap|Line Numbers
    1. Area              Median
    2. California        $110,000.00
    3. New York          $115,000.00
    4. Philadelphia      $116,000.00
    5. Trenton                 $0.00
P.S. - There is another alternative if you are interested and that is to let Excel do the work by passing an Array to its MEDIAN() Function.

4 3934
ADezii
8,834 Expert 8TB
Subscribing, will return later.
Jan 28 '10 #2
nico5038
3,080 Expert 2GB
I found various routines when searching using "access median function".
The only additional thing for you is the filtering of the data for one product, thus you'll have to add the productID to the parameters of the function and the WHERE clause in the strSQL.

Getting the idea ?

Nic;o)
Jan 28 '10 #3
ADezii
8,834 Expert 8TB
Here is a little Function that I created that is used within the context of a Calculated Field in a DISTINCT Query. In this particular case, it accepts two Arguments: Distinct Field and Field to calculate the actual Median Value. In this specific instance, I calculated the Median Value for properties by Area. I'll post the SQL, Function Definition, Sample Data, and Query Execution results for clarification.
  1. SQL Statement
    Expand|Select|Wrap|Line Numbers
    1. SELECT DISTINCT tblValues.Area, fCalculateMedian([Area],[Price]) AS Median
    2. FROM tblValues
    3. ORDER BY tblValues.Area;
  2. Function Definition
    Expand|Select|Wrap|Line Numbers
    1. Public Function fCalculateMedian(strArea As String, curPrice As Currency)
    2. Dim MyDB As DAO.Database, MyRS As DAO.Recordset, MySQL As String
    3. Dim intNumOfRecords As Integer, curPriceValue As Currency
    4.  
    5. MySQL = "SELECT tblValues.Area, tblValues.Price FROM tblValues "
    6. MySQL = MySQL & "WHERE tblValues.Area='" & strArea & "' ORDER BY tblValues.Area, tblValues.Price;"
    7.  
    8. Set MyDB = CurrentDb()
    9. Set MyRS = MyDB.OpenRecordset(MySQL, dbOpenSnapshot)
    10.  
    11. MyRS.MoveLast: MyRS.MoveFirst
    12.  
    13. intNumOfRecords = MyRS.RecordCount
    14.  
    15. If intNumOfRecords = 0 Then
    16.   fCalculateMedian = Null
    17.     Exit Function
    18. End If
    19.  
    20. If intNumOfRecords Mod 2 = 0 Then       'Even number of Records
    21.   MyRS.Move (intNumOfRecords \ 2) - 1   'Move half-way point
    22.     curPriceValue = MyRS![Price]        '1st value to average
    23.   MyRS.MoveNext
    24.     curPriceValue = curPriceValue + MyRS![Price]               '2nd value to average added to 1st value
    25.     fCalculateMedian = Format$(curPriceValue / 2, "Currency")  'Average them out
    26. Else   'Odd number of Records
    27.   MyRS.Move (intNumOfRecords \ 2)
    28.   fCalculateMedian = Format$(MyRS![Price], "Currency")
    29. End If
    30.  
    31. MyRS.Close
    32. End Function
  3. Values in tblValues
    Expand|Select|Wrap|Line Numbers
    1. Area            Price
    2. California      $100,000.00
    3. California      $150,000.00
    4. California      $120,000.00
    5. New York        $110,000.00
    6. New York         $20,000.00
    7. New York        $150,000.00
    8. New York        $120,000.00
    9. Philadelphia    $300,000.00
    10. Philadelphia    $100,000.00
    11. Philadelphia    $200,000.00
    12. Philadelphia    $116,000.00
    13. Philadelphia     $90,000.00
    14. California       $38,000.00
    15. Trenton              $0.00
  4. Query results
    Expand|Select|Wrap|Line Numbers
    1. Area              Median
    2. California        $110,000.00
    3. New York          $115,000.00
    4. Philadelphia      $116,000.00
    5. Trenton                 $0.00
P.S. - There is another alternative if you are interested and that is to let Excel do the work by passing an Array to its MEDIAN() Function.
Jan 28 '10 #4
MrDeej
157 100+
Thank you! That did the trick.

You have solved the challenge :=)
Feb 3 '10 #5

Sign in to post your reply or Sign up for a free account.

Similar topics

4
by: Ross Contino | last post by:
Hello to all: I have been searching the web for examples on how to determine a median value in a mySQL table. I have reviewed the article at...
2
by: Hugo L. | last post by:
I really don't know how to calculate the median. Can anybody help me?
4
by: uspensky | last post by:
I have a table (cars) with 3 fields: VIN, Class, sell_price 101, sports, 10000 102, sports, 11000 103, luxury, 9000 104, sports, 11000 105, sports, 11000 106, luxury, 5000 107, sports, 11000
1
by: Jaime Leivers | last post by:
Here's a median function in access that you can call in any query. You could change this to any excel function you wanted. Most people can find the windows help file that says how to call an excel...
0
by: Sebastien.LICHTHERTE | last post by:
Hello, I need to calculate the median and percentile of values in a group by query satisfying several criteria the user is asked to fill in when opening the query. A have a table called RX with...
73
by: brady | last post by:
I have a function called int calcMedian(int ar, int numElements) How do i code the function to calculate the median in the array? Please help
1
by: CrostonScottish | last post by:
Has anybody got any ideas or nifty code for calculating the median value in a form. I currently have a database which we use for post-course evaluations. Part of the evaluation asks the attendees...
3
by: mehwishobaid | last post by:
i dont know wat is wrong with my code. when i compile. i get the error saying line 29: error: expression must have pointer-to-object type #include <iostream> using namespace std; #include...
6
by: rrstudio2 | last post by:
I am using the following vba code to calculate the median of a table in MS Access: Public Function MedianOfRst(RstName As String, fldName As String) As Double 'This function will calculate the...
2
by: dmorand | last post by:
Does anyone have any experience with retrieving a median value using SQL server? I'm trying to retrieve a median value from a list of various numerical values. Any help would be appreciated.
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
1
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.