מציאת שתי שורות: לפני ואחרי נקודה נתונה

יום שבת, אפריל 4, 2015

נתונה טבלה, נקודה מסויימת (תאריך, ערך כספי..), וצריך למצוא את השורה שלפניה ואת השורה שאחריה.למשל- יש טבלה ובה עמודת תאריכים, וצריך למצוא את התאריך שלפני 01/04/2015 והתאריך שאחרי 01/04/2015. במקרה זה- 25/03/2015, 02/04/2015.כיצד נעשה זאת באופן כללי? מכיוון שמדובר בשתי השורות הראשונות בכפוף לתנאי כלשהו, האפשרות הראשונה העולה בדעתנו היא שימוש באופרטור Top, אלא שלא ברור מהיכן להתחיל לחפש: אין מדובר בשני הראשונים החל מ-01/04/2015, אלא החל מהתאריך שלפני.. אם כך, שתי הצעות ישומיות: נמצא את הראשון אחרי (בסדר עולה) וניעזר ב-Lag כדי למצוא את הקודם. נמצא את התאריך הראשון לפני (בסדר יורד), ובעזרתו את שני...
אין תגובות

אפטימיזציה לבעיית Top

יום שישי, יולי 25, 2014

נתונה לנו בעייה פחות או יותר כזו: יש למצוא את 30 המכירות הראשונות היום של פריטים X,Y,Z;או אולי את 10 הקפיצות לרוחק הטובות ביותר של הספורטאיות A,B,C,D,E וכו’.לא מדובר ב-30 המכירות הראשונות של כל אחד מהפריטים (90 בסה”כ), וגם לא ב-10 המכירות הראשונות של כל אחד (שיסתכמו בסופו של דבר ל-30); אלא ב-30 של כולם ביחד ללא כל התחייבות לחלוקה הפנימית. ניצןר לשם כך טבלה להדגמה המתבססת על טבלת sys.messages, נוסיף לה טבלת עזר עם רשימת language_id וננסה לשלוף את 10 ה-message_id הראשונים שלהם. נתחיל מהטבלאות: Select *Into #T_MessagesFrom ...
אין תגובות

השימושים השונים ב-Cross Apply (וב-Outer Apply)

יום ראשון, מרץ 4, 2012

Cross Aplly הוא חלופה משודרגת של Inner Join ולו שימושים מעניינים שלא כולם מוכרים. 1. בתור שכזה ניתן לעשות איתו כל מה שניתן לעשות עם Inner Join ויותר מזה. רוצה לומר שלו נקלע לאי בודד ונוכל לקחת איתנו לשם רק מספר בודד של פקודת SQL – נעדיף לארוז באמתחתנו את ה-Apply ולהשאיר את ה-Join בבית... שתי השליפות הבאות מבצעות אותו הדבר, לשתיהן פלט זהה, וגם Execution Plan זהה: Use AdventureWorks; Go   Select S.name+'.'+O.name FullName ...
תגובה אחת

משפט Select עם Top & Distinct

יום שישי, ספטמבר 3, 2010

ניצור טבלה זמנית, ונכניס לתוכה את המספר 1 שלוש פעמים, את המספר 2 שלוש פעמים, את המספר 3 שלוש פעמים ואת המספר 4 שלוש פעמים; בסה"כ שנים עשר מספרים: Create Table #T(I Int); Go Insert Into #T Select 1 Union All Select 1 Union All Select 1 Union All Select 2 Union All Select 2 Union All Select 2 Union All Select 3 Union All Select 3 Union All Select 3 Union All Select 4 Union All Select 4 Union All Select 4; Go איזה פלט תחזיר כל אחת מהשאילתות הבאות? Select...
אין תגובות