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

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

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

בדיקת טבלת Slowly Changing Dimension בעזרת פונקציית Lag

יום שישי, ינואר 13, 2012

פונקציית Lag – מחידושי SQL Server 2012 שניתן להתייחס בעזרתה לרשומות קודמות ללא Self Joins מסורבלים, מאפשרת בין היתר לבצע ביקורת איכות לטבלאות SCD בקלות רבה יותר. בפוסט שפרסמתי לאחרונה הופיע סקריפט ליצירת טבלה מתאימה, וכן שליפה למציאת שגיאות המבוססת על Group By. לא אחזור כאן על הסקריפט, אלא רק אראה כיצד ניתן להגיע לחריגים בקלות בעזרת הפונקציה Lag: With T As(Select *, Lag(EndDate,1,Null) Over(Partition By ID Order By StartDate) PreviousEndDateFrom T_SCD)Select *From TWhere PreviousEndDate+1<>StartDateOrder By ID, ...
אין תגובות

השוואה לשורה הקודמת

יום שלישי, יוני 15, 2010

ב-SQL Server בניגוד ל-Oracle לא קיימות הפונקציות Lag ו-Lead שמאפשרות להשוות שורה לקודמת לה, ולכן מי שמעוניין בהשוואה שכזו נאלץ ללכלך את ידיו ולכתוב SQL-ים מסובכים. האתגר אופייני בעיקר לניתוח של נתונים לאורך זמן, למשל- השוואה בין שער המניה היום לשער המניה ביום המסחר הקודם, השוואה בין המכירות החודש למכירות בחודש הקודם (או בחודש המקביל אשתקד) וכו'. פניתי ל-AdventureWorks לטבלה HumanResources.EmployeePayHistory ובדקתי ארבע שליפות שונות: 1. מספור השורות בעזרת CTE, ושליפת Left Join בין הטבלה לעצמה כך שלכל שורה תותאם הקודמת. 2. CTE רקורסיבי: מספור השורות, ולאחר מכן שליפה רקורסיבית בסדר...
אין תגובות