ניתוח טבלת נתונים (שאילתות מקוננות / שאילתות קבוצה) SQL
-
ברשותי טבלת נתונים (SQL - SSMS)
המכילה נתוני מכירות בצורה הזאתאני מעוניין להחזיר תוצאה של השורה הראשונה שבה שונה המחיר > מהמחיר הקודם
ובנוסף לקבל את כל נתוני השורה המקורית של תוצאת המחיר הראשון
(ז"א לקבל את השורה הראשונה שבה נמכר המוצר לראשונה,
ואת השורה הבאה שבה נמכר המוצר במחיר שונה מהמחיר שהיה עד כה,
ואת השורה הבאה שבה נמכר המוצר במחיר שונה מהמחיר עד עכשיו - למרות שזה בעצם חזר למחירו המקוריאני מצפה לקבל רק את השורות הצבועות בלבד)
האם ישנה דרך לבצע זאת ברמת השליפה
או שלא נותר אלא לשלוף את הנתונים ולעבור עליהם בלולאה
.
הערה: שאלתי בכוונה כ'שאלה פתוחה'
ע"מ שלא 'לזהם' את תהליך החשיבה (ואקבל תשובות על הגישות שניסיתי לבצע, ולא על עצם השאלה) -
@mekev לא ברור מהתמונה לפי מה אתה ממיין את השורות.
בכל מקרה, האם זה עוזר לך?
בדוגמה שלי מיינתי לפי תאריךhttp://sqlfiddle.com/#!18/0c0d6/3
WITH cte (date, price, data, rank) AS ( SELECT *, RANK() OVER (ORDER BY date) AS rank FROM table1 ) SELECT cte.date, cte.price, cte.data FROM cte LEFT JOIN cte AS cte1 ON cte1.rank = cte.rank - 1 WHERE cte.rank = 1 OR cte1.price <> cte.price;
הסבר קצר:
יש שימוש ב-WITH
ללכוד את הטבלה עם עמודה נוספת בשםrank
שמייצגת את המיקום של העמודה בסדר המיון (פוקנצייתRANK
היא "פונקציית חלון")
ואז אנחנו מחברים את הטבלה עם עצמה כדי לקבל את השורה הקודמת עם השורה הנוכחית
ואז מסננים לפיrank = 1
שזה השורה הראשונה או שהמחיר של שורה זו לא זהה למחיר של שורה הקודמת