🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych.msaccess
Article #137494

Liczenie mediany SQL - przyspieszenie

#137494
From: minfo
Date: Fri, 18 Aug 2017 07:01
107 lines
3555 bytes
Dzień dobry,
Czy można jakoś przyspieszyć poniższe funkcje liczenia mediany?


Function DMediana(sql, ParamArray args())
  Dim db As Database
  Dim qr As QueryDef
  Dim rs As Recordset
  Dim pr As Parameter


  Dim i As Long, k As Long


  Set db = DBEngine(0)(0)
  Set qr = db.CreateQueryDef("", sql)


  For i = 0 To UBound(args)
    Set pr = qr.Parameters(i)
    pr.Value = args(i)
  Next


  Set rs = qr.OpenRecordset
  With rs
    If Not (.BOF And .EOF) Then
      .MoveLast
      k = .RecordCount
      If k Mod 2 = 1 Then
        .MoveFirst
        .Move (k - 1) / 2
        DMediana = .Fields(0)
      Else
        .MoveFirst
        .Move k / 2 - 1
        DMediana = .Fields(0)
        .MoveNext
        DMediana = (DMediana + .Fields(0)) / 2
      End If


    Else
      DMediana = Null
    End If
  End With


End Function




Sub CMEDIA()
On Error GoTo ErrMsg

Dim strSQLDM As String
Dim strFile As String
Dim strFtext As String
Dim db As Database
Dim rs As DAO.Recordset
Dim fs As Object
Dim csvFMedia As Object
Dim i As Integer
Dim v As Variant

Dim sUser As String
sUser = VBGetUserName()

Set db = CurrentDb

strSQLDM = "SELECT t.PRODUKT, DMEDIANA(""SELECT MM FROM qryMEDIANA WHERE PRODUKT = [p1] ORDER BY MM"", " & _
"t.PRODUKT ) AS MEDIANA FROM qryMEDIANA AS t GROUP BY t.PRODUKT;"

'strSQLDM = "SELECT t.PRODUKT, DMEDIANA(""SELECT MM FROM PRECYZJA3 WHERE PRODUKT = [p1] ORDER BY MM"", " & _
'"t.PRODUKT ) AS MEDIANA FROM PRECYZJA3 AS t GROUP BY t.PRODUKT;"

DoCmd.Hourglass (True)

Set rs = db.OpenRecordset(strSQLDM)

If rs.BOF Or rs.EOF Then
Exit Sub
Else
    
    v = SysCmd(acSysCmdInitMeter, "Generowanie mediany:", rs.RecordCount)
    i = 1

    rs.MoveFirst
    
    Do Until rs.EOF
        v = SysCmd(acSysCmdUpdateMeter, i)
        i = i + 1
   
        If strFtext = "" Then
        strFtext = "Produkt;Mediana"
        strFtext = strFtext & vbCrLf & "'" & rs.Fields("PRODUKT") & ";" & rs.Fields("MEDIANA")
        Else
        strFtext = strFtext & vbCrLf & "'" & rs.Fields("PRODUKT") & ";" & rs.Fields("MEDIANA")
        End If
        
        rs.MoveNext
    Loop


pozdrawiam
MF
Technical Details
Message-ID: <4daf7bbf-74f5-4804-b5ec-a69ac0078248@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeds.phibee-telecom.net!border2.nntp.ams1.giganews.com!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!newspeer1.nac.net!border2.nntp.dca1.giganews.com!nntp.giganews.com!m81no296599itb.0!news-out.google.com!n39ni12462qtf.1!nntp.google.com!v49no1654295qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.107.202.65 with SMTP id a62mr5358240iog.55.1503039663684;        Fri, 18 Aug 2017 00:01:03 -0700 (PDT)
X-Received: by 10.31.157.209 with SMTP id g200mr75645vke.9.1503039663635; Fri, 18 Aug 2017 00:01:03 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!feeds.phibee-telecom.net!border2.nntp.ams1.giganews.com!newsfeed.xs4all.nl!newsfeed9.news.xs4all.nl!newspeer1.nac.net!border2.nntp.dca1.giganews.com!nntp.giganews.com!m81no296599itb.0!news-out.google.com!n39ni12462qtf.1!nntp.google.com!v49no1654295qtc.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.bazy-danych.msaccess
Date: Fri, 18 Aug 2017 00:01:03 -0700 (PDT)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=213.241.94.194; posting-account=vYGi6woAAAA6NlWlzOm2dBNZ6sPJDKfx
NNTP-Posting-Host: 213.241.94.194
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <4daf7bbf-74f5-4804-b5ec-a69ac0078248@googlegroups.com>
Subject: Liczenie mediany SQL - przyspieszenie
From: minfo@onet.pl
Injection-Date: Fri, 18 Aug 2017 07:01:03 +0000
Lines: 111
X-Original-Bytes: 3383
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit