SQL מותנה

  • פותח הנושא uyt2
  • פורסם בתאריך

uyt2

New member
SQL מותנה

שלום, יש לי טבלה עם שדה של תאריך. אני רוצה לבצע את השאילתה הבאה: בחר את 3 השורות עם התאריך העתידי הקרוב ביותר לתאריך עכשיו. אם אין 3 עתידיים, בחר את 3 האחרונים. איך עושים זאת ב-SQL? אני צריך את זה גם ל ACCESS וגם ל MYSQL. תודה, ושבת שלום
 

flenger

New member
קצת לא מובן מה הכוונה ב3 האחרונים

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

uyt2

New member
הסבר

א. באופן וודאי איו 2 רשומות עם אותו תאריך. ב. במידה ויש פחות מ-3 רשומות עם תאריך עתידי בוחרים את ה- 3 האחרונות מבחינת תאריך, למשל נניח שיש רשומה לשלשום, אתמול, היום, ומחר, אז בוחרים אתמול, היום ומחר. תודה
 

Dימה

New member
עכשיו זה נשמע הרבה יותר קל

נעשה את זה ב-2 שלבים: 1. ניצור טבלה עם התאריך האחרון של היום+3 ימים. 2. מתוך הטבלה הראשונה, נקח את ה-3 האחרונים. נכון? select top 3 * from ( select * from A where A.time < sysdate+3 ) order by time desc
 

גרי רשף

New member
הייתי מנסה משהו כזה

1. 3 השורות עם התאריך העתידי הקרוב ביותר לתאריך עכשיו: Select Top 3 עם תנאי שהם גדולים מהתאריך הנוכחי, והמיון יורד. 2. 3 האחרונים: Select Top 3 עם תנאי שהם קטנים מהנוכחי, והמיון עולה. 3. לשתי השליפות הנ"ל בצע Union, ושלוף מהסט המאוחד את שלושת הראשונים בסדר יורד.
 

uyt2

New member
מתחיל להתכנס...

תודה על ההצעה, עכשיו נותרתי עם 3 הרשומות הרצויות אבל בסדר הפוך. נניח של לי 5 תאריכים מ- 1 עד 5 כאשר היום הוא יום 4. אני רוצה לקבל 3, 4, 5 ולא 5, 4, 3. האם יש דרך לקבל את 3 הראשונים ואז לבצע להם היפוך סדר בלי להוסיף עוד SELECT?
 
למעלה