Article View: pl.comp.bazy-danych.msaccess
Article #137494Liczenie mediany SQL - przyspieszenie
From: minfo
Date: Fri, 18 Aug 2017 07:01
Date: Fri, 18 Aug 2017 07:01
107 lines
3555 bytes
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-mailShow 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