דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ניתוח טבלת נתונים (שאילתות מקוננות / שאילתות קבוצה) SQL

ניתוח טבלת נתונים (שאילתות מקוננות / שאילתות קבוצה) SQL

מתוזמן נעוץ נעול הועבר תכנות
2 פוסטים 2 כותבים 135 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • M מחובר
    M מחובר
    mekev
    כתב ב נערך לאחרונה על ידי
    #1

    ברשותי טבלת נתונים (SQL - SSMS)
    המכילה נתוני מכירות בצורה הזאת

    4bd43b91-233c-475a-93c1-c35cd0f69e6b-image.png

    אני מעוניין להחזיר תוצאה של השורה הראשונה שבה שונה המחיר > מהמחיר הקודם

    ובנוסף לקבל את כל נתוני השורה המקורית של תוצאת המחיר הראשון
    (ז"א לקבל את השורה הראשונה שבה נמכר המוצר לראשונה,
    ואת השורה הבאה שבה נמכר המוצר במחיר שונה מהמחיר שהיה עד כה,
    ואת השורה הבאה שבה נמכר המוצר במחיר שונה מהמחיר עד עכשיו - למרות שזה בעצם חזר למחירו המקורי

    אני מצפה לקבל רק את השורות הצבועות בלבד)

    b822a75a-6a38-4fcd-9d14-6c7a2bc90bf7-image.png

    האם ישנה דרך לבצע זאת ברמת השליפה
    או שלא נותר אלא לשלוף את הנתונים ולעבור עליהם בלולאה


    .
    הערה: שאלתי בכוונה כ'שאלה פתוחה'
    ע"מ שלא 'לזהם' את תהליך החשיבה (ואקבל תשובות על הגישות שניסיתי לבצע, ולא על עצם השאלה)

    תגובה 1 תגובה אחרונה
    1
    • yossizY מנותק
      yossizY מנותק
      yossiz
      כתב ב נערך לאחרונה על ידי yossiz
      #2

      @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 שזה השורה הראשונה או שהמחיר של שורה זו לא זהה למחיר של שורה הקודמת

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      4

      בא תתחבר לדף היומי!
      • התחברות

      • אין לך חשבון עדיין? הרשמה

      • התחברו או הירשמו כדי לחפש.
      • פוסט ראשון
        פוסט אחרון
      0
      • דף הבית
      • קטגוריות
      • פוסטים אחרונים
      • משתמשים
      • חיפוש
      • חוקי הפורום