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

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

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

שאילתת SQL חצויה

מתוזמן נעוץ נעול הועבר תכנות
17 פוסטים 5 כותבים 270 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שואףש מנותק
    שואףש מנותק
    שואף
    כתב ב נערך לאחרונה על ידי שואף
    #1

    לחכמי הSQL.
    להלן שאילתא שנותנת מידע על המתקשרים מתוך טבלא שנרשמת שם שורה בכל התקשרות, JOIN עם טבלא של שמות של המתקשרים

    SELECT 
    	CONCAT('="', CDR_GLOBAL.src, '"') AS phone, 
    	TRUECALLER.name AS name, 
    	MIN(CDR_GLOBAL.calldate) AS firstCall, 
    	MAX(CDR_GLOBAL.calldate) AS lastCall, 
    	ROUND(SUM(CDR_GLOBAL.billsec)/60) AS minuts, 
    	COUNT(CDR_GLOBAL.id) AS calls 
    FROM 
    	ICALL.CDR_GLOBAL
    LEFT JOIN 
    	ICALL.TRUECALLER 
    ON 
    	TRUECALLER.phone=CDR_GLOBAL.src 
    WHERE did IN(07212345678,07212345679)
    GROUP BY CDR_GLOBAL.src
    ORDER BY calls DESC
    

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

    WHERE calldate >= '2020-05-01 00:00:00' AND did IN(07212345678,07212345679)
    

    זה גם כמובן מגביל את הMIN(CDR_GLOBAL.calldate)
    אשמח לרעיון איך לעשות בשאילתא אחת צמצום שיתן רק סך דקות והתקשרויות של החודש הנוכחי אבל עדיין יתן התקשרות ראשונה כללית.
    תודה

    עריכת הסבר, הCONCAT בשורה הראשונה, זה כי זה נכתב בקובץ CSV, וזה פטנט להצגת ה0 בתחילת המספר טלפון.

    ליצירת קשר: admin@i-call.me

    הידד! גישה למייל גם בלי מחשב ואינטרנט!

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

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

      תגובה 1 תגובה אחרונה
      1
      • dovidD מנותק
        dovidD מנותק
        dovid
        ניהול
        כתב ב נערך לאחרונה על ידי
        #3
        SELECT 
        	CONCAT('="', T1.src, '"') AS phone, 
        	TRUECALLER.name AS name, 
        	(SELECT MIN(calldate) FROM ICALL.CDR_GLOBAL WHERE src = T1.src)  AS firstCall, 
        	MAX(T1.calldate) AS lastCall, 
        	ROUND(SUM(T1.billsec)/60) AS minuts, 
        	COUNT(T1.id) AS calls 
        FROM 
        	ICALL.CDR_GLOBAL AS T1
        LEFT JOIN 
        	ICALL.TRUECALLER 
        ON 
        	TRUECALLER.phone=T1.src 
        WHERE did IN(07212345678,07212345679)
        GROUP BY T1.src
        ORDER BY calls DESC
        
        

        או

        SELECT 
        	CONCAT('="', T1.src, '"') AS phone, 
        	TRUECALLER.name AS name, 
        	FirstT.First , 
        	MAX(T1.calldate) AS lastCall, 
        	ROUND(SUM(T1.billsec)/60) AS minuts, 
        	COUNT(T1.id) AS calls 
        FROM 
        	ICALL.CDR_GLOBAL AS T1
        LEFT JOIN 
        	ICALL.TRUECALLER 
        ON 
        	TRUECALLER.phone=T1.src 
        LEFT JOIN
                (SELECT src, MIN(calldate) as First FROM ICALL.CDR_GLOBAL GROUP BY src) as FirstT
        ON T1.src = FirstT.src
        WHERE did IN(07212345678,07212345679)
        GROUP BY T1.src
        ORDER BY calls DESC
        
        

        תעדכן מה יותר מהר...

        • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
        • בכל נושא אפשר ליצור קשר dovid@tchumim.com
        תגובה 1 תגובה אחרונה
        3
        • שואףש מנותק
          שואףש מנותק
          שואף
          כתב ב נערך לאחרונה על ידי
          #4

          @dovid אמר בשאילתת SQL חצויה:

          תעדכן מה יותר מהר...

          הראשונה 29 שניות והשניה 11... השאילתא המקורית לקחה 0.8 שניה..
          תודה רבה רבה

          ליצירת קשר: admin@i-call.me

          הידד! גישה למייל גם בלי מחשב ואינטרנט!

          dovidD תגובה 1 תגובה אחרונה
          2
          • שואףש שואף

            @dovid אמר בשאילתת SQL חצויה:

            תעדכן מה יותר מהר...

            הראשונה 29 שניות והשניה 11... השאילתא המקורית לקחה 0.8 שניה..
            תודה רבה רבה

            dovidD מנותק
            dovidD מנותק
            dovid
            ניהול
            כתב ב נערך לאחרונה על ידי
            #5

            @שואף יש לזה פתרונות יעילים ואלגנטיים יותר אבל הם לא רלוונטיים לגירסת הmySql שלך (אלא"כ עדכנת? אין מצב).

            • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
            • בכל נושא אפשר ליצור קשר dovid@tchumim.com
            שואףש תגובה 1 תגובה אחרונה
            2
            • dovidD dovid

              @שואף יש לזה פתרונות יעילים ואלגנטיים יותר אבל הם לא רלוונטיים לגירסת הmySql שלך (אלא"כ עדכנת? אין מצב).

              שואףש מנותק
              שואףש מנותק
              שואף
              כתב ב נערך לאחרונה על ידי
              #6

              @dovid אמר בשאילתת SQL חצויה:

              אלא"כ עדכנת?

              דווקא אחרי הנפילה של שבוע שעבר הקמתי את השרת מחדש, אבל אני רואה שהברירת מחדל היא 5.7, כך שכנראה זה הגרסא היציבה

              ליצירת קשר: admin@i-call.me

              הידד! גישה למייל גם בלי מחשב ואינטרנט!

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

                @dovid
                אולי ניתן לעשות עם UNION.
                או אולי לא ירדתי לסוף דעתו

                תגובה 1 תגובה אחרונה
                0
                • שואףש שואף

                  @dovid אמר בשאילתת SQL חצויה:

                  אלא"כ עדכנת?

                  דווקא אחרי הנפילה של שבוע שעבר הקמתי את השרת מחדש, אבל אני רואה שהברירת מחדל היא 5.7, כך שכנראה זה הגרסא היציבה

                  dovidD מנותק
                  dovidD מנותק
                  dovid
                  ניהול
                  כתב ב נערך לאחרונה על ידי dovid
                  #8

                  @שואף אמר בשאילתת SQL חצויה:

                  @dovid אמר בשאילתת SQL חצויה:

                  אלא"כ עדכנת?

                  אבל אני רואה שהברירת מחדל היא 5.7, כך שכנראה זה הגרסא היציבה

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

                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                  yossizY תגובה 1 תגובה אחרונה
                  2
                  • yossizY מנותק
                    yossizY מנותק
                    yossiz
                    כתב ב נערך לאחרונה על ידי yossiz
                    #9

                    נסיון לפתור בצורה אחרת:

                    SELECT 
                    	CONCAT('="', CDR_GLOBAL.src, '"') AS phone, 
                    	TRUECALLER.name AS name, 
                    	MIN(CDR_GLOBAL.calldate) AS firstCall, 
                    	MAX(CDR_GLOBAL.calldate) AS lastCall, 
                    	ROUND(SUM(CASE WHEN CDR_GLOBAL.calldate >= '2020-05-01 00:00:00' THEN CDR_GLOBAL.billsec ELSE 0 END)/60) AS minuts, 
                    	COUNT(CASE WHEN CDR_GLOBAL.calldate >= '2020-05-01 00:00:00' THEN CDR_GLOBAL.id ELSE null END) AS calls 
                    FROM 
                    	ICALL.CDR_GLOBAL
                    LEFT JOIN 
                    	ICALL.TRUECALLER 
                    ON 
                    	TRUECALLER.phone=CDR_GLOBAL.src 
                    WHERE did IN(07212345678,07212345679)
                    GROUP BY CDR_GLOBAL.src
                    HAVING lastCall >= '2020-05-01 00:00:00'
                    ORDER BY calls DESC
                    

                    האם זה תקין בכלל, (אם לא אשמח ללמוד למה לא) ובמידה וכן האם יש לזה ביצועים יותר טובים?

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

                    yossizY תגובה 1 תגובה אחרונה
                    3
                    • yossizY yossiz

                      נסיון לפתור בצורה אחרת:

                      SELECT 
                      	CONCAT('="', CDR_GLOBAL.src, '"') AS phone, 
                      	TRUECALLER.name AS name, 
                      	MIN(CDR_GLOBAL.calldate) AS firstCall, 
                      	MAX(CDR_GLOBAL.calldate) AS lastCall, 
                      	ROUND(SUM(CASE WHEN CDR_GLOBAL.calldate >= '2020-05-01 00:00:00' THEN CDR_GLOBAL.billsec ELSE 0 END)/60) AS minuts, 
                      	COUNT(CASE WHEN CDR_GLOBAL.calldate >= '2020-05-01 00:00:00' THEN CDR_GLOBAL.id ELSE null END) AS calls 
                      FROM 
                      	ICALL.CDR_GLOBAL
                      LEFT JOIN 
                      	ICALL.TRUECALLER 
                      ON 
                      	TRUECALLER.phone=CDR_GLOBAL.src 
                      WHERE did IN(07212345678,07212345679)
                      GROUP BY CDR_GLOBAL.src
                      HAVING lastCall >= '2020-05-01 00:00:00'
                      ORDER BY calls DESC
                      

                      האם זה תקין בכלל, (אם לא אשמח ללמוד למה לא) ובמידה וכן האם יש לזה ביצועים יותר טובים?

                      yossizY מנותק
                      yossizY מנותק
                      yossiz
                      כתב ב נערך לאחרונה על ידי
                      #10

                      0c6974fd-9819-4b25-9521-87e3dc96c1a7-image.png
                      @שואף מה פירוש ההצבעה?
                      נראה לי לפרש כך: "יפה שנזכרת בי עכשיו... כבר עברתי לנושאים אחרים ואין לי כח לחזור לזה שוב..."
                      טוב, אני מבין.
                      האמת שלא ניסיתי לעזור לך אלא לעצמי כי אני מתחיל גמור ב-SQL ואני מנסה להשתפשף.
                      אשמח אם יש לך כח להעיר על הקוד בין לטוב בין למוטב.

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

                      שואףש תגובה 1 תגובה אחרונה
                      2
                      • yossizY yossiz

                        0c6974fd-9819-4b25-9521-87e3dc96c1a7-image.png
                        @שואף מה פירוש ההצבעה?
                        נראה לי לפרש כך: "יפה שנזכרת בי עכשיו... כבר עברתי לנושאים אחרים ואין לי כח לחזור לזה שוב..."
                        טוב, אני מבין.
                        האמת שלא ניסיתי לעזור לך אלא לעצמי כי אני מתחיל גמור ב-SQL ואני מנסה להשתפשף.
                        אשמח אם יש לך כח להעיר על הקוד בין לטוב בין למוטב.

                        שואףש מנותק
                        שואףש מנותק
                        שואף
                        כתב ב נערך לאחרונה על ידי
                        #11

                        @yossiz אהבתי...
                        תיכננתי לשבת על זה קצת יותר מאוחר כשאהיה פנוי לא רק להעתיק את השאילתא אלא גם לנתח ולהבין אותה.. בנתיים הצבעתי להודות לך על המאמץ והעזרה..

                        ליצירת קשר: admin@i-call.me

                        הידד! גישה למייל גם בלי מחשב ואינטרנט!

                        yossizY תגובה 1 תגובה אחרונה
                        2
                        • שואףש שואף

                          @yossiz אהבתי...
                          תיכננתי לשבת על זה קצת יותר מאוחר כשאהיה פנוי לא רק להעתיק את השאילתא אלא גם לנתח ולהבין אותה.. בנתיים הצבעתי להודות לך על המאמץ והעזרה..

                          yossizY מנותק
                          yossizY מנותק
                          yossiz
                          כתב ב נערך לאחרונה על ידי yossiz
                          #12

                          @שואף תודה, בלי לחץ.

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

                          תגובה 1 תגובה אחרונה
                          0
                          • dovidD dovid

                            @שואף אמר בשאילתת SQL חצויה:

                            @dovid אמר בשאילתת SQL חצויה:

                            אלא"כ עדכנת?

                            אבל אני רואה שהברירת מחדל היא 5.7, כך שכנראה זה הגרסא היציבה

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

                            yossizY מנותק
                            yossizY מנותק
                            yossiz
                            כתב ב נערך לאחרונה על ידי
                            #13

                            @dovid אמר בשאילתת SQL חצויה:

                            טוב, אז אתה יכול לשכוח מהפתרון של window functions.

                            סוף סוף למדתי פחות או יותר מה זה window function.
                            לשם לימוד, האם המימוש על ידי window function ייראה כך?

                            SELECT 
                            	CONCAT('="', CDR_GLOBAL.src, '"') AS phone, 
                            	TRUECALLER.name AS name, 
                            	MIN(CDR_GLOBAL.calldate) AS firstCall, 
                            	MAX(CDR_GLOBAL.calldate) AS lastCall, 
                            	ROUND(SUM(CDR_GLOBAL.billsec/60) FILTER (WHERE lastCall >= '2020-05-01 00:00:00') OVER () AS minuts, 
                            	COUNT(CDR_GLOBAL.id) FILTER (WHERE lastCall >= '2020-05-01 00:00:00') OVER () AS calls 
                            FROM 
                            	ICALL.CDR_GLOBAL
                            LEFT JOIN 
                            	ICALL.TRUECALLER 
                            ON 
                            	TRUECALLER.phone=CDR_GLOBAL.src 
                            WHERE did IN(07212345678,07212345679)
                            GROUP BY CDR_GLOBAL.src
                            HAVING lastCall >= '2020-05-01 00:00:00'
                            ORDER BY calls DESC
                            
                            

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

                            dovidD תגובה 1 תגובה אחרונה
                            0
                            • yossizY yossiz

                              @dovid אמר בשאילתת SQL חצויה:

                              טוב, אז אתה יכול לשכוח מהפתרון של window functions.

                              סוף סוף למדתי פחות או יותר מה זה window function.
                              לשם לימוד, האם המימוש על ידי window function ייראה כך?

                              SELECT 
                              	CONCAT('="', CDR_GLOBAL.src, '"') AS phone, 
                              	TRUECALLER.name AS name, 
                              	MIN(CDR_GLOBAL.calldate) AS firstCall, 
                              	MAX(CDR_GLOBAL.calldate) AS lastCall, 
                              	ROUND(SUM(CDR_GLOBAL.billsec/60) FILTER (WHERE lastCall >= '2020-05-01 00:00:00') OVER () AS minuts, 
                              	COUNT(CDR_GLOBAL.id) FILTER (WHERE lastCall >= '2020-05-01 00:00:00') OVER () AS calls 
                              FROM 
                              	ICALL.CDR_GLOBAL
                              LEFT JOIN 
                              	ICALL.TRUECALLER 
                              ON 
                              	TRUECALLER.phone=CDR_GLOBAL.src 
                              WHERE did IN(07212345678,07212345679)
                              GROUP BY CDR_GLOBAL.src
                              HAVING lastCall >= '2020-05-01 00:00:00'
                              ORDER BY calls DESC
                              
                              
                              dovidD מנותק
                              dovidD מנותק
                              dovid
                              ניהול
                              כתב ב נערך לאחרונה על ידי
                              #14

                              @yossiz ככה להביך אותי מול כולם...

                              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                              yossizY תגובה 1 תגובה אחרונה
                              0
                              • dovidD dovid

                                @yossiz ככה להביך אותי מול כולם...

                                yossizY מנותק
                                yossizY מנותק
                                yossiz
                                כתב ב נערך לאחרונה על ידי
                                #15

                                @dovid למה הבכתי אותך? גם אתה רמזת שיש פתרון על ידי window functions רק שזה לא יעזור ל-@שואף כי גירסת ה-mysql שלו לא תומכת בזה.

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

                                dovidD תגובה 1 תגובה אחרונה
                                0
                                • yossizY yossiz

                                  @dovid למה הבכתי אותך? גם אתה רמזת שיש פתרון על ידי window functions רק שזה לא יעזור ל-@שואף כי גירסת ה-mysql שלו לא תומכת בזה.

                                  dovidD מנותק
                                  dovidD מנותק
                                  dovid
                                  ניהול
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  @yossiz יש הבדל בין רק לדעת שזה יעזור, לבין לדעת איך לכתוב עם זה...

                                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                                  yossizY תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD dovid

                                    @yossiz יש הבדל בין רק לדעת שזה יעזור, לבין לדעת איך לכתוב עם זה...

                                    yossizY מנותק
                                    yossizY מנותק
                                    yossiz
                                    כתב ב נערך לאחרונה על ידי yossiz
                                    #17

                                    @dovid אם כן זה בסדר... תשקיע רבע מהזמן שאני השקעתי/בזבזתי ותגיע לשם...

                                    אגב, פרעתי לך היום חוב ישן:
                                    @yossiz אמר בפילוח נתונים ב mySQL:

                                    טוב, יום אחד כשאלמד SQL אחזור לזה ואבין.

                                    חזרתי לשם והבנתי, אז תודה!

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

                                    תגובה 1 תגובה אחרונה
                                    3
                                    תגובה
                                    • תגובה כנושא
                                    התחברו כדי לפרסם תגובה
                                    • מהישן לחדש
                                    • מהחדש לישן
                                    • הכי הרבה הצבעות


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

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

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