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

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

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

הפתעות בבדיקת יעילות של שאילתות

יום רביעי, נובמבר 5, 2014

נתונות שתי טבלאות, למשל אלו: Select * Into #T_Messages From sys.messages;Alter Table #T_Messages Add Constraint PK_#T_Messages Primary Key Clustered (message_id,language_id);Go Select * Into #T_Languages From sys.syslanguages;Alter Table #T_Languages Add Constraint PK_#T_Languages Primary Key Clustered (lcid);Go ואני רוצה לבדוק את היעילות של שאילתת ה-Left Join הבאה – כמה זמן הריצה נמשכת, כמה Pages נקראים, אולי השוואה לשאילתה דומה שכתובה קצת אחרת וכו’: Select *From #T_Messages MLeft Join #T_Languages L On M.language_id=L.lcid; מכיוון שמדובר בשליפה של מאות אלפי שורות – יש לברר מי צריך את כל זה: מישהו מתכוון לעיין בכובד...
אין תגובות

שיפור ביצועי Join עצמי

יום שישי, אוגוסט 22, 2014

Join עצמי הוא Join בין טבלה לעצמה, מן הסתם כדי להתאים סוג אחד של שורות לאחרות.המקרה הפשוט בו אטפל כאן הוא התאמה של 1:1 – שורה מכאן מול שורה מכאן. למשל- בטבלת נוכחות נרצה להתאים את ההגעה ליציאה בטבלת התחברות לאתר נרצה להתאים את ה-logins ל-logouts בטבלת המכירות נרצה להתאים את המכירות של כל סוכן למכירות בחודש הקודם או בחודש המקביל אשתקד לצורך השוואה בטבלת שערי מניות נרצה להתאים את השער של כל יום לזה הקודם כדי לחשב את השינוי באחוזים לפני כמה שנים החלטתי לשפר מעט את הספרדית שלי – אותה אני מכיר ברמה...
אין תגובות

החור הראשון

יום ראשון, אוקטובר 3, 2010

הלו- מה זה? אתה בענייני SQL או….?.. קודם כל להירגע (ככתוב בספר בישול ידוע): בסך הכל שאלו אותי בעבודה כיצד למצוא בטבלה עם עמודת מספרים את הערך הראשון שחסר, הווה אומר- החור הראשון ברצף. את הפטנט למדתי לפני שנים מאיציק בן גן: מבצעים Left Join של הטבלה עם עצמה לפי N=N+1 (כלומר– לכל שורה נתאים את הבאה אחריה), נחפש את אלו להם לא נמצאה התאמה, נבצע Top 1 כי מעוניינים בראשון, ולא נשכח להוסיף 1 לערך שקיבלנו (הרי לא מצאנו את הראשון שחסר אלא את האחרון שאינו חסר..). ניצור טבלת מספרים בת כמיליון שורות, ונשמיט ברשלנותנו מספר ערכים בדרך: Create Table #T(I Int...
אין תגובות