מציאת רשומה אחרונה בשאילתה

ארי4791

משתמש צעיר
עשיתי את הקוד SQL הבא כדי למצוא את הרשומה האחרונה לכל ID (קוד מזהה) אבל הוא לפעמים מביא לי לא את הרשומה האחרונה.
קוד:
SELECT תרומות.ID, Last(תרומות.תאריך) AS [תאריך אחרון], Last(תרומות.סכום) AS [סכום אחרון], Last(תרומות.הערה) AS [הערה אחרונה]
FROM תרומות
GROUP BY תרומות.ID
ORDER BY תרומות.ID;
מה הבעיה כאן?
תודה רבה מאוד.
 

אייקוד

משתמש פעיל
אתה רוצה לקבל את השורה האחרונה בטבלה?
תעשה MAX של ID
 
נערך לאחרונה ב:

FullTime

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

ארי4791

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

ארי4791

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

ארי4791

משתמש צעיר
אני רוצה למצוא את התרומה האחרונה בטבלת תרומות לפי כל ID.
תודה רבה מאוד.
 

קבצים מצורפים

  • תרומות.accdb.txt
    KB 452 · צפיות: 24

FullTime

משתמש מקצוען
@עמיק @ארי4791
הMAX נכון לתאריך, לא לסכום.

נראה שיש איזה בעיה בנתונים של הטבלה,
תנסה להוסיף רשומות חדשות, תראה שהוא כן מחזיר את האחרון.
ייתכן שהנתונים הוזנו שלא לפי הסדר?
(עם שאילתת הוספה או RS, אפשר להכניס מספור אוטומטי ייעודי...)

תנסה לבנות מחדש את הטבלה.
או שתעשה בית חולים עם שאילתה נוספת של MAX על סידורי תרומה ואחרי זה פרטים עליו.


עריכה: השערתי שהבעיה בנתונים שבטבלה כנראה מאומתת...
יש בדוגמא המצורפת שאילתה בשם הוספה,
שמעבירה את הנתונים לטבלה חדשה, במיון לפי מס' סידורי.
שאילתה עליה מחזירה נתונים נכונים.
 

קבצים מצורפים

  • תרומות.accdb.txt
    KB 616 · צפיות: 10
נערך לאחרונה ב:

ארי4791

משתמש צעיר
קודם כל תודה רבה מאוד, אבל רק שאלה קטנה.
איך קורה בעיה כזאת, כלומר הרי סו"ס הנתונים בשתי הטבלאות שווים אז איך זה קרה?
 

FullTime

משתמש מקצוען
איך קורה בעיה כזאת, כלומר הרי סו"ס הנתונים בשתי הטבלאות שווים אז איך זה קרה?

כנראה שהנתונים לא הוכנסו לפי הסדר.

אולי מישהו ימצא סיבה אחרת, אבל כנראה שזה..

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

חגי פאהן

משתמש סופר מקוצען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
כשאני מוסיף לשם את השדה של המזהה ועושה עליו MAX הוא מביא לי את השדות של התרומה אחת לפי האחרונה ורק בשדה מזהה הוא מביא לי את הגדול (לפחות בשורה שבדקתי).
כאילו הוא מצרף שתי שורות שונות בטבלה.
משהו מוזר מאוד, מישהו יודע מה זה?
ודאי, כי עשית max/last על כל שדה בנפרד, לכן הוא מביא לך בתוך כל ID כל שדה משורה אחרת. חייבים subselect, שיהיה תנאי בערך כמו זה:
קוד:
SELECT תרומות.ID, תרומות.תאריך AS [תאריך אחרון], תרומות.סכום AS [סכום אחרון], תרומות.הערה AS [הערה אחרונה]
FROM תרומות r
where תרומות.תאריך = (select MAX(תרומות.תאריך) from תרומות t where t.ID = r.ID)
ORDER BY תרומות.ID;
אפשר גם במיון לפי יותר משדה אחד - אבל צריכים partition.
אם יש שתי שורות עם אותו תאריך בדיוק זה לא יעבוד חלק, ואז צריך קצת לשכלל את ה-subselect.
 
נערך לאחרונה ב:

ארי4791

משתמש צעיר
ודאי, כי עשית max/last על כל שדה בנפרד, לכן הוא מביא לך בתוך כל ID כל שדה משורה אחרת. חייבים subselect, שיהיה תנאי בערך כמו זה:

SELECT תרומות.ID, תרומות.תאריך AS [תאריך אחרון], תרומות.סכום AS [סכום אחרון], תרומות.הערה AS [הערה אחרונה]
FROM תרומות r
where תרומות.תאריך = (select MAX(תרומות.תאריך) from תרומות t where t.ID = r.ID)
ORDER BY תרומות.ID;
אפשר גם במיון לפי יותר משדה אחד - אבל צריכים partition.
אם יש שתי שורות עם אותו תאריך בדיוק זה לא יעבוד חלק, ואז צריך קצת לשכלל את ה-subselect.
אפשר בבקשה לכתוב את זה בתור קוד שיהיה יותר מסודר?
תודה רבה
 

ארי4791

משתמש צעיר
כנראה שהנתונים לא הוכנסו לפי הסדר.

אולי מישהו ימצא סיבה אחרת, אבל כנראה שזה..

אם יש לך ניק בתחומים תנסה לשאול שם,
שם יש תותחים שידעו לדון בזה כנראה..
אקסס יודע לפי מה זה הוכנס?
הרי אני מסנן לפי הסידורי מה זה משנה איך זה הוכנס?
 

חגי פאהן

משתמש סופר מקוצען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
@חגי פאהן
אכן, ה subselect הוא פתרון טוב.
אבל, הlast כן צריך להחזיר את הרשומה האחרונה לאותו ID.
קראתי קצת על last. זה לא באמת sql אלא פונקציה של access.
ולפי הנטען פה: https://www.javatpoint.com/sql-select-last בתוך כל ID, הוא כביכול ממיין לפי העמודה שעליה עושים את last, ומביא את האבר האחרון. וממילא הוא לא צריך להביא מאותה שורה, אלא את התאריך האחרון בסידורי הזה, ואת הסכום האחרון (הכי גדול? או שמתחיל ב-99? לא יודע, יש לי oracle) בסידורי הזה, וכיו"ב.
אפשר בבקשה לכתוב את זה בתור קוד שיהיה יותר מסודר?
תודה רבה
ערכתי.
אקסס יודע לפי מה זה הוכנס?
הרי אני מסנן לפי הסידורי מה זה משנה איך זה הוכנס?
אם יש לך עמודת תאריך אז למה שלא תשתמש בה? זה מושלם.
 
נערך לאחרונה ב:

חגי פאהן

משתמש סופר מקוצען
מנוי פרימיום
בוגר/תלמיד פרוג
עיצוב גרפי
עימוד ספרים
אגב, גם max ו-min וכד' עובדים ככה, הם לא מחוייבים להביא מאותה שורה. ולא זו אף זו, אפשר לשלוף את שניהם כאחד: למשל הסכום הכי גדול בסידורי פלוני והסכום הכי קטן בו.
קוד:
SELECT תרומות.ID, MAX(תרומות.סכום) AS [סכום גדול], MIN(תרומות.סכום) AS [סכום קטן]
FROM תרומות
GROUP BY תרומות.ID
ORDER BY תרומות.ID;
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכז

א שִׁיר הַמַּעֲלוֹת לִשְׁלֹמֹה אִם יְהוָה לֹא יִבְנֶה בַיִת שָׁוְא עָמְלוּ בוֹנָיו בּוֹ אִם יְהוָה לֹא יִשְׁמָר עִיר שָׁוְא שָׁקַד שׁוֹמֵר:ב שָׁוְא לָכֶם מַשְׁכִּימֵי קוּם מְאַחֲרֵי שֶׁבֶת אֹכְלֵי לֶחֶם הָעֲצָבִים כֵּן יִתֵּן לִידִידוֹ שֵׁנָא:ג הִנֵּה נַחֲלַת יְהוָה בָּנִים שָׂכָר פְּרִי הַבָּטֶן:ד כְּחִצִּים בְּיַד גִּבּוֹר כֵּן בְּנֵי הַנְּעוּרִים:ה אַשְׁרֵי הַגֶּבֶר אֲשֶׁר מִלֵּא אֶת אַשְׁפָּתוֹ מֵהֶם לֹא יֵבֹשׁוּ כִּי יְדַבְּרוּ אֶת אוֹיְבִים בַּשָּׁעַר:
נקרא  12  פעמים

אתגר AI

אחרי החגים • אתגר 13

לוח מודעות

למעלה