ניתוח טבלת נתונים (שאילתות מקוננות / שאילתות קבוצה) 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שזה השורה הראשונה או שהמחיר של שורה זו לא זהה למחיר של שורה הקודמת
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות