Hi, Could any one of you suggest me a better way to bump the data in oracle 7.3 to mysql 4.0 classic. Thanks, Narasimha
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Tue 9/28/2004 8:58 PM To: martin fasani Cc: [EMAIL PROTECTED] Subject: Re: Oracle query to mysql Your original Oracle(R) query (slightly reformatted): SELECT IMRTAB.IMR906 AS NUM906 , IMRTAB.IMRFLL AS FLL , SUM(IMRTAB.IMRCLL) AS CLL , ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR , ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO , SUM(IMRTAB1.IMRCLL) AS CLL_N , ROUND(SUM(IMRTAB1.IMRDSC),2) AS DUR_N , ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N , SUM(IMRTAB2.IMRCLL) AS CLL_R , ROUND(SUM(IMRTAB2.IMRDSC),2) AS DUR_R , ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R FROM IMRTAB , IMRTAB IMRTAB1 , IMRTAB IMRTAB2 /* here does the tables alias*/ WHERE IMRTAB.IMRIDE = IMRTAB1.IMRIDE (+) AND IMRTAB.IMRIDE = IMRTAB2.IMRIDE (+) /* links by the uniqID both alias */ AND (IMRTAB1.IMRTAR (+) = 'N') /* takes N calls and discard the rest for IMRTAB1 */ AND (IMRTAB2.IMRTAR (+) = 'R') /* takes R calls and discard the rest for IMRTAB2 */ AND (IMRTAB.IMRFLL BETWEEN '01/09/2004' and '10/09/2004') AND (IMRTAB.IMRCLI=2584 AND (IMRTAB.IMR906=803xxxxxx )) GROUP BY IMRTAB.IMR906,IMRTAB.IMRFLL ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL My MySQL translation: SELECT IMRTAB.IMR906 AS NUM906 , IMRTAB.IMRFLL AS FLL , SUM(IMRTAB.IMRCLL) AS CLL , ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR , ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO , SUM(IMRTAB1.IMRCLL) AS CLL_N , ROUND(SUM(IMRTAB1.IMRDSC),2) AS DUR_N , ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N , SUM(IMRTAB2.IMRCLL) AS CLL_R , ROUND(SUM(IMRTAB2.IMRDSC),2) AS DUR_R , ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R FROM IMRTAB LEFT JOIN IMRTAB IMRTAB1 ON IMRTAB.IMRIDE = IMRTAB1.IMRIDE AND IMRTAB1.IMRTAR = 'N' /* N calls only for IMRTAB1 */ LEFT JOIN IMRTAB IMRTAB2 ON IMRTAB.IMRIDE = IMRTAB2.IMRIDE AND IMRTAB2.IMRTAR = 'R' /* R calls only for IMRTAB2 */ WHERE IMRTAB.IMRFLL BETWEEN '2004-09-01' and '2004-09-10' AND IMRTAB.IMRCLI=2584 AND IMRTAB.IMR906=803xxxxxx GROUP BY IMRTAB.IMR906,IMRTAB.IMRFLL ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL You were using the Oracle syntax ", ...(+)" to declare your outer joins. The equivalent MySQL form is "LEFT JOIN... ON ...". http://dev.mysql.com/doc/mysql/en/JOIN.html I also had to reformat the dates in your WHERE clause to be MySQL formatted: '01/09/2004' (dd/mm/yyyy) =>> '2004-09-01' (yyyy-mm-dd) http://dev.mysql.com/doc/mysql/en/Date_and_time_types.html http://dev.mysql.com/doc/mysql/en/DATETIME.html Shawn Green Database Administrator Unimin Corporation - Spruce Pine "martin fasani" <[EMAIL PROTECTED]> wrote on 09/28/2004 07:23:38 AM: > > Hi guys, > > I'm working in a telecom company that has Oracle for the call statistics. > Now we export the daily stats to a remote mySql. > > The daily resume table looks like this: > +------------+-----------+-----------------+--------+----------------------+ > ----------+--------+--------+ > | IMRFLL | IMR906 | IMRTER | IMRTAR | IMRDUR | > IMRFAC | IMRCLI | IMRCLL | > +------------+-----------+-----------------+--------+----------------------+ > ----------+--------+--------+ > | 2004-06-01 | 803xxxxxx | xxxxxxxxx | N | 446.916666666666572 | > 40355904 | 21 | 26 | > | 2004-06-01 | 803xxxxxx | 0 | R | 9.416666666666664 | > 40355904 | 21 | 10 | > +------------+-----------+-----------------+--------+----------------------+ > ----------+--------+--------+ > > What I need it's to get a report that joins the table to itself two times to > get the Normal tarif ( IMRTAR=N) and the Reduced tarif (IMRTAR=R). > > In Oracle is done using Outer joins like this: > SELECT IMRTAB.IMR906 AS NUM906,IMRTAB.IMRFLL AS FLL, SUM(IMRTAB.IMRCLL) AS > CLL ,ROUND(SUM(IMRTAB.IMRDSC),2) AS DUR, > ROUND(SUM(IMRTAB.IMRDSC)/SUM(IMRTAB.IMRCLL),2) AS PRO, SUM(IMRTAB1.IMRCLL) > AS CLL_N,ROUND(SUM(IMRTAB1.IMRDSC),2) AS > DUR_N,ROUND(SUM(IMRTAB1.IMRDSC)/SUM(IMRTAB1.IMRCLL),2) AS PRO_N, > SUM(IMRTAB2.IMRCLL) AS CLL_R,ROUND(SUM(IMRTAB2.IMRDSC),2) AS > DUR_R,ROUND(SUM(IMRTAB2.IMRDSC)/SUM(IMRTAB2.IMRCLL),2) AS PRO_R > FROM IMRTAB, IMRTAB IMRTAB1, IMRTAB IMRTAB2 /* here does the tables alias > */ > > WHERE IMRTAB.IMRIDE = IMRTAB1.IMRIDE (+) AND IMRTAB.IMRIDE = IMRTAB2.IMRIDE > (+) /* links by the uniqID both alias */ > AND (IMRTAB1.IMRTAR (+) = 'N') /* takes N calls and discard the rest for > IMRTAB1 */ > AND (IMRTAB2.IMRTAR (+) = 'R') /* takes R calls and discard the rest for > IMRTAB2 */ > > AND (IMRTAB.IMRFLL BETWEEN '01/09/2004' and '10/09/2004') AND (IMRTAB.IMRCLI > =2584 AND (IMRTAB.IMR906=803xxxxxx )) GROUP BY IMRTAB.IMR906,IMRTAB.IMRFLL > ORDER BY IMRTAB.IMR906,IMRTAB.IMRFLL > > And this query returns something like this: > +-----------+------------+--------+--------+--------+--------+ > | NUM906 | FLL | CLL | DUR | DUR_N | CLL_N | DUR_R | > CLL_R > +-----------+------------+--------+--------+--------+--------+ > | 803xxxxxx | 2004-09-02 | 1 | 4.30 | 4.30 | 1 | > | 803xxxxxx | 2004-09-01 | 2 | 0.00 | 0.00 | 2 | > +-----------+------------+--------+--------+--------+--------+ > I took out some fields in this graphic just to simplify. > > I've been trying to get this query running for mysql but I can get the same > results and I kill the DB. Does someone knows if I can get the same result ? > > Thanks is advance, > MARTIN > [EMAIL PROTECTED] > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > Confidentiality Notice The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain confidential or privileged information. If you are not the intended recipient, please notify the sender at Wipro or [EMAIL PROTECTED] immediately and destroy all copies of this message and any attachments.