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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. range Overlap range SQL

range Overlap range SQL

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

    אתגר מעניין, לחפש טווח שחופף עם טווח, בשבילי זה צורך אקוטי כרגע.
    הנה דוגמא:

    declare @range1 table (id int identity ,fromyear int,toyear int);
    declare @range2 table ( id int identity , fromyear int,toyear int);
    
    insert into @range1 (fromyear,toyear) values(2000,2011),(2005,2010)
    
    insert into @range2 (fromyear,toyear) values(2003,2007),(2011,2015)
    
    select r1.id as id1 , r2.id as id2 from 
    @range1 r1, @range2 r2
    --where ????
    

    מה שאני צריך זה שאם ישנה חפיפה כלשהי כלומר -- ששנה אחת (או יותר) הנמצאת בתוך הטווח של השנים בטבלה 2 -- היא: נמצאת בתוך הטווח של השנים של טבלה 1 הוא יקבל שורה. שתציג לי את id של טבלה 1 ו id של טבלה 2 לאמור: כאן יש חפיפה כלשהי (איזו שנה???? לא משנה לי כרגע!!!)

    עריכה: למי שלא הבין מה אני רוצה, אנסח את זה עם דוגמא: נניח שיש לנו 2 אנשים ראובן ושמעון, שניהם בוודאי עבדו בבזק שנה אחת או יותר, אנחנו צריכים שהאלגוריתם יגיד לנו האם הם עבדו ביחד בבזק שנה אחת לפחות. האם ישנה דרך לעשות את זה ב SQL ללא יצירת טבלה נוספת אמצעית (שזה פשוט שאפשרי הואיל ואנחנו יכולים לעשות join פשוט כמו כאן)

    פורסם במקור בפורום CODE613 ב17/02/2015 21:45 (+02:00)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

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

      INNER JOIN עושה את העבודה הזאת ללא WHERE.

      רק שכאן אין מפתח להשוות אלא ביטוי שזה לא נתמך בON נראה לי, אז פשוט WHERE מסובך 🙂

      פורסם במקור בפורום CODE613 ב17/02/2015 21:54 (+02:00)

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      1
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        אם שנה מסויימת נמצאת בטווח בהכרח שאחד הגבולות הוא גם בתוך הטווח. אז:

        select r1.id as id1 , r2.id as id2 from
        @range1 r1, @range2 r2
        WHERE r2.fromyear between r1.fromyear and r1.toyear 
           OR r2.toyear between r1.fromyear and r1.toyear
        

        ככה נראה לי.

        פורסם במקור בפורום CODE613 ב17/02/2015 22:03 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • א מנותק
          א מנותק
          ארכיטקט
          כתב ב נערך לאחרונה על ידי
          #4

          האלגוריתם שלך שקרן יען איננו מכסה מצב שבו הטווח השני גדול בהרבה מן הראשון, והשנים שבאמצע כולם בפנים.
          כזה:
          r1 = 1990-2015
          r2= 2005-2009
          או להיפך... בכל מקרה הם נפגשו שם בעבודה בין השנים 2005-2009 והתנאים שלך לא מתקיימים שם.

          פורסם במקור בפורום CODE613 ב18/02/2015 00:48 (+02:00)

          אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

          תגובה 1 תגובה אחרונה
          0
          • א מנותק
            א מנותק
            ארכיטקט
            כתב ב נערך לאחרונה על ידי
            #5

            @דוד ל.ט.

            אלא ביטוי שזה לא נתמך בON נראה לי

            😮 😮 😮
            כל דבר נתמך ב on נראה לי.
            וכדי לא להיראות גולם הנבהל להשיב ב"נראה לי" השקעתי דקה וחצי להתקדם קצת בחיים:

            declare @t1 table (id int ,id2 int );
            declare @t2 table ( id int );
            
            insert into @t1 (id,id2) values(1,3)
            
            insert into @t2 (id) values(2)
            
            select * from @t1 t1 inner join @t2 t2 on t2.id between t1.id and t1.id2
            

            פורסם במקור בפורום CODE613 ב18/02/2015 00:49 (+02:00)

            אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

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

              יש מחיר לחיפוש עקום באנגלית בגוגל:

              פורסם במקור בפורום CODE613 ב18/02/2015 08:04 (+02:00)

              אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

              תגובה 1 תגובה אחרונה
              0
              • א מנותק
                א מנותק
                ארכיטקט
                כתב ב נערך לאחרונה על ידי
                #7

                אז זה הפתרון האולטימטיבי:

                דוד זה בזכותך!
                נתתי לך תודה.

                declare @range1 table (id int identity ,fromyear int,toyear int);
                declare @range2 table ( id int identity , fromyear int,toyear int);
                
                insert into @range1 (fromyear,toyear) values(2000,2011),(2005,2010)
                
                insert into @range2 (fromyear,toyear) values(2003,2007),(2011,2015)
                
                select r1.id as id1 , r2.id as id2 from 
                @range1 r1 inner join @range2 r2
                 on 
                   r1.fromyear between r2.fromyear and r2.toyear
                or r1.toyear between r2.fromyear and r2.toyear
                or r2.fromyear between r1.fromyear and r1.toyear
                or r2.toyear between r1.fromyear and r1.toyear
                

                פורסם במקור בפורום CODE613 ב18/02/2015 09:37 (+02:00)

                אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

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

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

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

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