Article View: pl.comp.bazy-danych.msaccess
Article #137496Re: Liczenie mediany SQL - przyspieszenie
From: md
Date: Fri, 18 Aug 2017 07:57
Date: Fri, 18 Aug 2017 07:57
116 lines
3591 bytes
3591 bytes
W dniu 18-08-2017 o 09:01, minfo@onet.pl pisze:
> 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
>
taka sugestia :
czy nie lepiej napisać kwerendę uprządkowaną rosnąco lub malejąco
policzyć rekordy
wyznaczyć środkowy
pobrać jego wartość
md
Technical Details
Message-ID:
<59969dc6$0$647$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<4daf7bbf-74f5-4804-b5ec-a69ac0078248@googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Subject: Re: Liczenie mediany SQL - przyspieszenie Newsgroups: pl.comp.bazy-danych.msaccess References: <4daf7bbf-74f5-4804-b5ec-a69ac0078248@googlegroups.com> From: md <bmkd@poczta.onet.pl> Date: Fri, 18 Aug 2017 09:57:41 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <4daf7bbf-74f5-4804-b5ec-a69ac0078248@googlegroups.com> Lines: 116 Message-ID: <59969dc6$0$647$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 95.48.0.238 X-Trace: 1503043014 unt-rea-b-01.news.neostrada.pl 647 95.48.0.238:53339 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit