עזרה בכתיבת פונקציה (אקסס)
-
-
תשתמש בשאילתא עם סכומים וקיבוץ, כאשר אתה עושה ספירה בעמודה אחת, ומקבץ בעמודה שנייה.
דוגמא:
SELECT Format([HNow],"Short Time") AS Expr1, Count(TblHistory.HNow) AS CountRows FROM TblHistory GROUP BY Format([HNow],"Short Time");
כמובן תחליף את שמות השדות והטבלה בהתאמה...
פורסם במקור בפורום CODE613 ב15/04/2015 18:00 (+03:00)
-
תשתמש בשאילתא עם סכומים וקיבוץ, כאשר אתה עושה ספירה בעמודה אחת, ומקבץ בעמודה שנייה.
מה שכתבת נותן לי סיכום של כמה פעמים מופיע כל נתון (= שעה ודקות) בטבלה.
אני צריך סיכום לפי טווח של דקות, לדוגמא 90 דקות - באיזה טווח של 90 דקות במשך היום יש הכי הרבה נתונים?
אפילו אם אעשה קיבוץ לפי השעה בלבד, ואדע שבשעה 12 (לדוגמא) יש הכי הרבה נתונים, זה עדיין לא נותן את התוצאה, כי הטווח יכול להיות גדול משעה וגם משעתיים.. והוא גם יכול להתחיל מאמצע שעה ולהגמר בסוף השעה שאחריה וכדומה..פורסם במקור בפורום CODE613 ב15/04/2015 19:13 (+03:00)
-
בהנחה שהבנתי אותך (השאלה מנוסחת מאוד לא ברור)
אתה צריך לולאה שעוברת על כל רשומה, ובתוכה יוצרת שאילתה שתחזיר את כל הרשומות שאחריה בתנאי שהערך הוא קטן מערך הרשומה הנוכחית + 90, שאילתה זו תיתן לך תוצאה פר רשומה. בסיום אתה יכול לקחת את הרב ביותר ולהחזירו כתוצאת הפונקציה.אם אתה רוצה עזרה ממשית, העלה הנה קובץ אקסס עם הטבלה, ועם נתונים לדוגמא, כולל תוצאה אחת נכונה ואחת לא נכונה!!!! בלי דוגמאות של ממש קשה להבין לגמרי מה המטרה שלך.
פורסם במקור בפורום CODE613 ב15/04/2015 19:45 (+03:00)
-
אתה יכול לכוון אותנו יותר?
לדוגמא. אתה רוצה לדעת בכל טווח?הפונקציה תקבל מספר דקות כל שהוא, לדוגמא 75,
ותחזיר את השעות במשך היום שבו היו הכי הרבה רשומות
לדוגמא, בין השעה 07:42 לשעה 08:57 - שזה 75 דקות.אתה צריך לולאה שעוברת על כל רשומה, ובתוכה יוצרת שאילתה שתחזיר את כל הרשומות שאחריה בתנאי שהערך הוא קטן מערך הרשומה הנוכחית + 90, שאילתה זו תיתן לך תוצאה פר רשומה. בסיום אתה יכול לקחת את הרב ביותר ולהחזירו כתוצאת הפונקציה.
אני חושב שזה הכיוון.
זה דוגמא לנתונים שבטבלה
אם אבקש טווח של 40 דקות התשובה הנכונה תהיה: 11:32-12:51 (4 רשומות)
אם אבקש טווח של 80 דקות התשובה הנכונה תהיה: 07:06-08:20 (5 רשומות)מקווה שעכשיו זה יותר ברור..
פורסם במקור בפורום CODE613 ב15/04/2015 20:09 (+03:00)
-
תבדוק אם זה עובד:
Function GetMaxCountRecordsInTimeRange(minutes As Integer, TableName As String, FieldName As String) As Date Dim rcs As Recordset, rcsResult As Recordset, TempDateValue As Date, TempCountValue As Long, TempFromDate As Date, TempToDate As Date Set rcs = CurrentDb.OpenRecordset("select " & FieldName & " from " & TableName) Do While Not rcs.EOF TempDateValue = rcs.Fields(0) Set rcsResult = CurrentDb.OpenRecordset("select count(" & FieldName & ") as CountRecords , Min(" & FieldName & ") as FromDate, Max(" & FieldName & ") as ToDate from " & TableName & " where " & FieldName & " between #" & TempDateValue & "# and #" & DateAdd("n", minutes, TempDateValue) & "#") If rcsResult.Fields("CountRecords").Value > TempCountValue Then TempCountValue = rcsResult.Fields("CountRecords").Value TempFromDate = rcsResult.Fields("FromDate").Value TempToDate = rcsResult.Fields("ToDate").Value End If rcs.MoveNext Loop MsgBox TempFromDate & " - " & TempToDate & " " & TempCountValue & " øùåîåú" GetMaxCountRecordsInTimeRange = TempFromDate End Function
פורסם במקור בפורום CODE613 ב15/04/2015 21:32 (+03:00)