ניתוח טבלת נתונים (שאילתות מקוננות / שאילתות קבוצה) 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שזה השורה הראשונה או שהמחיר של שורה זו לא זהה למחיר של שורה הקודמת