שלח תשובה

זירת השאלות

701
צפיות
9
תשובות

עזרה בכתיבת קוד – בקשר לתאריכים

,‏ 27 ביוני, 2008

שלום,
יש לי טבלה במסד נתונים שבה יש נתונים מכמה סוגים:
עמודה של שמות
עמודה נוספת של מספרים
ועמודה נוספת של תאריכים (בפורמט הזה: 01/07/2008)

אני עובד על מין מערכת של סטטיסיקה ואני רוצה להציג כמה נתונים;
לבדוק כמה משתמשים נרשמו לפי רבעונים בשנה.
לדוגמה:
רבעון זה שלושה חודשים בשנה (ינואר עד מרץ, אפריל עד יוני וכו').
כך ייראה המסד
שם: ישראל ישראלי   | תאריך הרשמה: 30/01/2008
שם: שיר שירן        | תאריך הרשמה: 30/03/2008
שם: שקר כלשהו    | תאריך הרשמה: 30/09/2008
אני רוצה לכתוב קוד שמחשב כמה משתמשים נרשמו ברבעון.

התוצאה תהיה:
2 משתמשים נרשמו ברבעון הראשון לשנה.
1 משתמש נרשם ברבעון השני לשנה
וכן הלאה (רבעון שלישי ורביעי).


שאלה נוספת:
איך אני כותב קוד שסופר לי רק ערכים ייחודיים בטבלה?
לדוגמה:
חגי
חגי
חגי
ישראל
משה

התוצאה תהיה 3 (ערכים ייחודים) מתוך רשימה של X…

אשמח לעזרה והכוונה.

תודה מראש ושבת שלום,
חגי

תגיות:

9 תשובות

  1. BuildHome הגיב:

    תשובה
    זה די פשוט.
    תריץ לולאת FOR למשל שתתקדם כל פעם ב-3 עד 12 חודשים (For m=0 To 12 Step 3).
    כל פעם בלולאה תריץ שאילתה על טווח התאריכים שלה (3 חודשים) בטבלה שלך, היכן שתאריך הרשמה נמצא בין החודשים בלולאה ושישלוף הכל, ידפיס נתונים או למערך כלשהו (לא הכי יעיל).

    בנוגע לכפילויות נתונים, יש לך את DISTINCT:
    https://webmaster.org.il/article.asp?id=21

    בהצלחה.


    "החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
    http://Www.Torec.Net &nbsp;* http://Www.Torec.In

  2. hagaibll הגיב:

    שאלה…
    הסתדרתי עם השאלה השנייה שלי בעזרת הצעתך – DISTINCT
    אבל קצת קשה לי עם הלולאה (שאלה מס' 1).

    תוכל לתת לי דוגמה?

    תודה ושבוע טוב,
    חגי

  3. BuildHome הגיב:

    תשובה
    אין כאן לתת דוגמא כי מדובר בקוד לא קצר, ואני לא יודע עם איזה מסד נתונים אתה עובד.

    אתה צריך לעשות בעצם 4 שאילתות, כל שאילתה שולפת נתונים של 3 חודשים מהשנה, כך:
    שאילתה 1: ינואר-מרץ
    שאילתה 2: אפריל-יוני
    שאילתה 3: יולי-ספטמבר
    שאילתה 4: אוקטובר-דצמבר

    כבר אולי עדיף ליצור פונקציה שתשלוף את הנתונים לפי תאריכים שתגדיר לה (מאיזה חודש ועד איזה חודש לשלוף), תציג את הנתונים כמו שצריך וכו' כדי לחסוך לך כפילויות של קוד.


    "החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
    http://Www.Torec.Net &nbsp;* http://Www.Torec.In

  4. hagaibll הגיב:

    אין מישהו שיכול לעזור לי…
    או להכווין אותי כיצד לכתוב פונקציה כזו?
    אני לא כ"כ מנוסה בעניין.

    אגב,
    אני עובד עם מסד נתונים ACCESS.

    תודה ויום טוב.

  5. samiprogram הגיב:

    הנה דוגמא
    sql = "select * from users order by writing_date desc"
    set users = con.execute(sql)

    dim rivon1, rivon2, rivon3, rivon4, rivon5, rivon1_counter, rivon2_counter,rivon3_counter, rivon4_counter

    rivon1 = "01/01/2008"
    rivon2 = "01/04/2008"
    rivon3 = "01/07/2008"
    rivon4 = "01/010/2008"
    rivon5 = "01/01/2009"

    do while not users.eof

    if users.fields("writing_date") > rivon1 and users.fields("writing_date") < rivon2 then
    rrivon1_counter = ivon1_counter + 1
    end if

    if users.fields("writing_date") > rivon2 and users.fields("writing_date") < rivon3 then
    rrivon2_counter = ivon1_counter + 1
    end if

    if users.fields("writing_date") > rivon3 and users.fields("writing_date") < rivon4 then
    rrivon3_counter = ivon1_counter + 1
    end if

    if users.fields("writing_date") > rivon4 and users.fields("writing_date") < rivon5 then
    rrivon4_counter = ivon1_counter + 1
    end if

    loop

  6. samiprogram הגיב:

    ויש דרך יותר הגיונית ויעילה
    זה לעשות בSQL את הספירה לדוגמא:

    sql_rivon1 = "select * from users where writing_date > #" & rivon1 & "# and writing_date < #" & rivon2 & "#"

    sql_rivon2 = "select * from users where writing_date > #" & rivon2 & "# and writing_date < #" & rivon3& "#"

    sql_rivon3 = "select * from users where writing_date > #" & rivon3 & "# and writing_date < #" & rivon3& "#"

    sql_rivon4 = "select * from users where writing_date > #" & rivon4 & "# and writing_date < #" & rivon5& "#"

    עכשיו צריך ליצור אובייקט קונקשן שתומך בספירת הרשומות ולהפעיל עליו את הSQL

  7. BuildHome הגיב:

    אפשר גם בעוד דרך יעילה
    אפשר לעשות שאילתה אחת בלבד שתשלוף נתונים בסידור לפי תאריך רק לפי השנה הנוכחית למשל , לפי מה שצריך.
    בלולאה (DO WHILE / GETROWS – תלוי בכמות נתונים), לבדוק את תאריך ההרשמה ולהתאים אותו למשתנה "שיחזיק" את מחרוזת הנתונים לרבעון מסוים (4 משתנים) ופשוט להדפיס כל משתנה במקום הנכון בעמוד.


    "החיים הם רק הדרך במסע הנפש", בילד 2004-2008 <img src='/images/6.gif'>
    http://Www.Torec.Net &nbsp;* http://Www.Torec.In

  8. hagaibll הגיב:

    שאלונת…
    אם יש לי תאריך במסד, לדוגמה: 01/01/2008
    איך אני יכול לשלוף כביכול את כל התאריכים במסד נתונים שרק החודש שלהם (הספרה האמצעית בתאריך) נע בין 0 ל-4?
    אפשרי לקחת חלק מהתאריך?
    נראה לי שככה זה יהיה יותר קל, לא?

  9. אלמוני הגיב:

    תשובה לשאלונת והצעה נוספת…
    יש להציב את השאילתה הבאה:

    SELECT DatePart("q",[date]) AS rivon, Count(kod) AS CountMen
    FROM tbl
    GROUP BY DatePart("q",[date]);
    (הפונקציה DatePart מחזירה חלק משנה, המפרמטר q מחזיר רבעון).

    כמו"כ, ניתן להחזיר רק את החודש ע"י הפונקציה month(<date>)

שלח תשובה