שאילתא של כניסות חדשות
-
יש לי טבלא של מאות אלפי כניסות, כל מתקשר נרשם בטבלא, עם המספר שלו והשעה בה הוא חייג.
אני רוצה לשלוף כמה מתקשרים חדשים התקשרו היום, שאף פעם לא היו בטבלא.הצורה הפרימיטיבית היא לעשות SELECT DISTINCT PHONE כדי לספור כמה מספרים שונים יש בטבלא, ואז לעשות אותה שאילתא עם WHERE DATE עד אתמול, ולחשב את ההפרש.
אבל אמור להיות דרך לעשות את זה בפקודה אחת. חיפשתי בסטאק אבל לא ידעתי איך לנסח את השאלה (NEW DISTINCT ENTRYS, החזיר דברים אחרים)
אשמח לעזרה ממי שהבין את השאלה -
@dovid נפלא
עכשיו אני מנסה להגביל את זה לפי תנאי מסוים, שיהיה תואם לשם מערכת (יש לי כמה מערכות על אותה מרכזיה, ואני רוצה לדעת למערכת הספציפית הזו כמה חדשים נכנסו.
ויש דבר מעניין. אם אני מגביל עם WHERE יוצא תוצאה אחת, ואם אני מגביל בHAVING יוצא משהו אחר.
אני מבין שהחישוב כנראה מתבצע בצורה אחרת, אבל איך אפשר לדעת מה התוצאה האמיתיתSELECT * FROM asteriskcdrdb.cdr GROUP BY cdr.src HAVING MIN(cdr.calldate) >= CURDATE() AND dcontext='XXX' SELECT * FROM asteriskcdrdb.cdr WHERE dcontext='XXX' GROUP BY cdr.src HAVING MIN(cdr.calldate) >= CURDATE()
-
הייתי צריך לשלב עוד שתי שאילתות.
אני צריך את רשימת המשתמשים, עם סך ההתקשרויות שלהם, ואורך הכולל של השיחות שלהם.
עשיתי count(src) מניח שככה זה צריך להיות, נכון?SELECT src, count(src), sum(billsec) FROM asteriskcdrdb.cdr WHERE dcontext='telecall' GROUP BY cdr.src HAVING MIN(cdr.calldate) >= CURDATE()
-
@dovid נפלתי עליך...
אני משכלל את הפקודה לאט לאט, ועכשיו רציתי לשלב את שמות המתקשרים
יש לי טבלא בשם NAMES, עם שתי שדות, name וphone.יש שם מאגר גדול של מספרים, עם השם שלהם.
אני רוצה לעשות שאילתא של המתקשרים החדשים, כנ"ל, עם השם שלהם.
עשיתי INNER JOIN, וזה תוקע את המעבד, מקפיץ את הCPU ולא מחזיר כלום
כנראה טעיתי, אשמח שתכוון אותיSELECT cdr.src, NAMES.name FROM cdr INNER JOIN NAMES ON NAMES.phone=cdr.src GROUP BY cdr.src HAVING MIN(cdr.calldate) >= CURDATE();
תודה רבה