-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Подскажите с функцией...

Вторник, 28 Января 2014 г. 15:36 + в цитатник
Добрый день всем форумчанам, помогите с проблемой...

у меня есть функция которая рассчитывает Персентиль....

+ Persentile

Public Function DPersent(strNameFields As String, strNameTBL As String, Optional strFilter As String = "", Optional p As Integer) As Variant
'ôóíêöèÿ âû÷èñëåíèÿ ïåðñåíòèëè
'èñïîëüçîâàíèå àíàëîãè÷íî DCount,DMax è ò.ï.
'strNameFields - èìÿ ïîëÿ ñ äàííûìè
'strNameTBL - íàçâàíèå òàáëèöû èëè ñîõðàíåííîãî çàïðîñà
'strFilter - ñòðîêà ôèëüòðà
'p - çíà÷åíèå ïåðñåíòèëè â èíòåðâàëå 0-100
'strFilter = ""
strNameTBL = "tbl_persent"
'strNameFields = "tbl_persent.Datele"
p = 90

Dim rst As ADODB.Recordset
Dim lngCount As Long
Dim k, part, x1, x2 As Double

On Error GoTo Err_dPersent

    lngCount = Nz(DCount("*", strNameTBL, strFilter), 0)
    If lngCount = 0 Then DPersent = Null: Exit Function

    Set rst = New ADODB.Recordset
    rst.Open "select " & strNameFields & " from " & strNameTBL & IIf(strFilter = "", "", "where " & strFilter) & " order by " & strNameFields, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
    If lngCount = 1 Then DPersent = Nz(rst.Fields(0), 0): Set rst = Nothing: Exit Function

     k = p * (lngCount - 1) / 100 + 1
     If (k / Int(k)) = 0 Or (k / Int(k)) = 1 Then
      rst.AbsolutePosition = CLng(k)
      DPersent = Nz(rst.Fields(0), 0)
     Else
      part = k - Int(k)
      rst.AbsolutePosition = CLng(Int(k))
      x1 = Nz(rst.Fields(0), 0)
      rst.MoveNext
      x2 = Nz(rst.Fields(0), 0)
      DPersent = (1 - part) * x1 + part * x2
     End If

    Set rst = Nothing
Exit_dPersent:
     Exit Function

Err_dPersent:
     Select Case Err.Number
         Case Else
             MsgBox "(" & Err.Number & ") " & Err.Description & " â ïðîöåäóðå dPersent "
             Resume Exit_dPersent
     End Select
End Function





и есть таблица с даными таково типа....
+ таблица с даными
POINT	LOC     DETERM. AN.METH. DATE	        TIME	VALUE	REMARC	
L2230	L	11.40	MDW.000	25.01.2012	10:30	23,3	RO1	
L2230	L	12.10	MDW.010	25.01.2012	10:30	0,8	RO1	
L2230	L	13.20	MDW.910	25.01.2012	10:30	100	RO1	
L2230	L	14.10	MDW.001	25.01.2012	10:30	10,910	RO1	
L2230	L	14.20	MDW.000	25.01.2012	10:30	80,000	RO1	
L2230	L	15.10	MDW.001	25.01.2012	10:30	217,000	RO1	
L2230	L	15.30	MDW.001	25.01.2012	10:30	5,400	RO1	
L2230	L	16.10	MDW.010	25.01.2012	10:30	8,440	RO1	
L2230	L	16.20	MDW.010	25.01.2012	10:30	750,000	RO1	
L2230	L	21.10	MDW.910	25.01.2012	10:30	0,130	RO1	
L2230	L	21.20	MDW.910	25.01.2012	10:30	0,014	RO1

L2230	L	11.40	MDW.000	09.02.2012	10:00	24,100	RO1
L2230	L	12.10	MDW.010	09.02.2012	10:00	0,300	RO1
L2230	L	13.20	MDW.910	09.02.2012	10:00	16,000	RO1
L2230	L	14.10	MDW.001	09.02.2012	10:00	11,240	RO1
L2230	L	14.20	MDW.000	09.02.2012	10:00	82,000	RO1
L2230	L	15.10	MDW.001	09.02.2012	10:00	289,000	RO1
L2230	L	15.30	MDW.001	09.02.2012	10:00	6,800	RO1
L2230	L	16.10	MDW.010	09.02.2012	10:00	8,300	RO1
L2230	L	16.20	MDW.010	09.02.2012	10:00	1023	RO1

L2240	L	12.10	MDW.010	15.02.2012	15:00	0,100	RO1
L2240	L	13.20	MDW.910	15.02.2012	15:00	44,000	RO1
L2240	L	14.10	MDW.001	15.02.2012	15:00	11,070	RO1
L2240	L	14.20	MDW.000	15.02.2012	15:00	76,000	RO1
L2240	L	15.10	MDW.001	15.02.2012	15:00	249,000	RO1
L2240	L	15.30	MDW.001	15.02.2012	15:00	5,800	RO1
L2240	L	16.10	MDW.010	15.02.2012	15:00	8,460	RO1
L2240	L	16.20	MDW.010	15.02.2012	15:00	740,000	RO1

L2240	L	12.10	MDW.010	14.03.2012	10:30	1,600	RO1
L2240	L	13.20	MDW.910	14.03.2012	10:30	50,000	RO1
L2240	L	14.10.	MDW.001	14.03.2012	10:30	12,380	RO1
L2240	L	14.20	MDW.000	14.03.2012	10:30	88,000	RO1
L2240	L	15.10	MDW.001	14.03.2012	10:30	227,000	RO1
L2240	L	15.30	MDW.001	14.03.2012	10:30	5,200	RO1
L2240	L	16.10	MDW.010	14.03.2012	10:30	8,160	RO1
L2240	L	16.20	MDW.010	14.03.2012	10:30	771,000	RO1
L2240	L	21.10	MDW.910	14.03.2012	10:30	0,330	RO1


Теперь сам вопрос? как в запросе вывести результат расчета персентиля поля VALUE по выделенным группам
в таблице т.е. с фильтром по полю POINT и DATE?

http://www.sql.ru/forum/1073958/podskazhite-s-funkciey


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку