לעתים מזומנות אנו צריכים להציג או לסנן מקסימום או מינימום של ערכים באמצעות שאילתת SQL ו\או כלים אוטומטים.
לדוגמא: בוא נניח שישנה טבלה המכילה:
קוד סוכן: agent_num
תאריך מכירה: sales_date
סכום מכירה: sales_sum
אנו רוצים להציג לכל סוכן את תאריך המכירה האחרון שלו ואת סכום המכירה באותו תאריך.
אם נתפתה ונבצע שאילתא SQL סטנדרטית, כגון:
נקבל תוצאה דומה או אפילו לזהה ל select * from table והסיבה לכך נעוצה בכך שה group by במשפט הSQL ייקבץ את ה max ביחס לכל צירוף של agent_num, sales num או בקיצור לכל שורה. בקיצור, יש לחפש את הישועה בשיטה אחרת לחלוטין.
שיטה א
בוא ניצור טבלה אמיתית באמצעות גזירה או וירטואלית כגון view או derived table שהנתונים בה יהיו הSQL הבא:
בוא נכנה טבלה זאת max_date_view.
כעת, יש לנו למעשה "יישות" שונה מבחינת SQL שמכילה לכל סוכן את תאריך המכירה האחרון שלו.
אם נחבר את הטבלה המקורית (table) ל max_date_view באמצעות join רגיל, כגון:
נקבל לכל סוכן את כל הנתונים לגבי תאריך המכירה האחרון שלו. שימו לב, החיבור בין table לבין max_date_view הוא באמצעות שני מפתחות. אחד לסוכן ואחד לתאריך האחרון.
שיטה ב
שיטה ב היא מעט יותר קשה להבנה, אך אחרי שהבנו את שיטה א, נוכל להבין גם בקלות יחסית את שיטה ב ומניסיון היא יותר שימושית.
השיטה אומרת: במקום שניצור טבלה או view, ניצור טבלה בתוך השאילתא באמצעות alias.
ראשית , נכתוב את השאילתא המקורית:
לאחר מכן, נוסיף חלק נוסף:
\
הסבר: בתוך השאילתא הפנימית, חישבנו את התאריך המקסימלי לכל סוכן מהטבלה המרכזית,table ואת החיבור בין table לשאילתא הפנימית בצענו באמצעות:
Where table_alias.agent_num=table.agent_num
לאחר שקיבלנו תאריך מקסימלי השוונו אותו לtable באמצעות(שאילתא פנימית Where sales_date=(