forum.bitel.ru
http://forum.bitel.ru/

сравнить данные из 2-х запросов
http://forum.bitel.ru/viewtopic.php?f=19&t=7990
Страница 1 из 1

Автор:  skyb [ 24 апр 2013, 06:40 ]
Заголовок сообщения:  сравнить данные из 2-х запросов

Код:
package ru.skyb.scripts.global.report;

import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
import java.util.Date;

import bitel.billing.common.TimeUtils;
import bitel.billing.server.contract.bean.*;

public class HouseDiff
   extends GlobalScriptBase
{
   @Override
   public void execute( Setup setup1, ConnectionSet connectionSet2 )
      throws Exception
   {

      Connection con = connectionSet2.getConnection();   
      /*Calendar calendar = new GregorianCalendar();
      GregorianCalendar nowDate = (GregorianCalendar) calendar.clone();//клонируем дату для дальнейшей работы
      nowDate.get(Calendar.DATE);
      GregorianCalendar sqlDate = (GregorianCalendar) calendar.clone();
      Date dateSql = TimeUtils.convertCalendarToSqlDate(sqlDate);
      Date dateNow = TimeUtils.convertCalendarToDate(nowDate);//переводим дату в тип Date с типа Calendar*/
      String FirstMonth = "SELECT count(c.id),cpt2.address,sum(cb.summa3) FROM contract AS c " +
                      "LEFT JOIN contract_parameter_type_2 AS cpt2 ON c.id=cpt2.cid " +
                      "LEFT JOIN contract_balance AS cb on c.id=cb.cid " +
                      "WHERE cpt2.pid=1 AND gr&(1<<5)>0 AND cb.yy=2013 AND cb.mm=2 AND cb.summa3 > 0 " +
                      "GROUP BY cpt2.hid ORDER BY count(c.id)";
      String SecondMonth = "SELECT count(c.id),cpt2.address,sum(cb.summa3) FROM contract AS c " +
                      "LEFT JOIN contract_parameter_type_2 AS cpt2 ON c.id=cpt2.cid " +
                      "LEFT JOIN contract_balance AS cb on c.id=cb.cid " +
                      "WHERE cpt2.pid=1 AND gr&(1<<5)>0 AND cb.yy=2013 AND cb.mm=4 AND cb.summa3 > 0 " +
                      "GROUP BY cpt2.hid ORDER BY count(c.id)";
      //print("QueryIdAddress=> " + FirstMonth);
      PreparedStatement FirstPs = con.prepareStatement( FirstMonth );
      ResultSet FirstRs = FirstPs.executeQuery();
      int FirstCid;
      int SecondCid;
      String SecondAddress;
      String FirstAddress;
      BigDecimal SecondSumma3;
      BigDecimal FirstSumma3;
      int i = 0;
      //int j = 0;
      int DiffCid;
      BigDecimal DiffSumma3;
      
      //print("SecondMonth => " + SecondMonth);
      PreparedStatement SecondPs = con.prepareStatement( SecondMonth );
      ResultSet SecondRs = SecondPs.executeQuery();
      
       while ( FirstRs.next() && SecondRs.next())
          {             
            //print ("address => " + address + " " + cid + " summa3=> " + summa3);
                  i++;
                  //j++;
                  FirstCid = FirstRs.getInt( 1 );
                  FirstAddress = FirstRs.getString( 2 );
                  FirstSumma3 = FirstRs.getBigDecimal( 3 );
                  
                   SecondCid = SecondRs.getInt( 1 );
                   SecondAddress = SecondRs.getString( 2 );
                   SecondSumma3 = SecondRs.getBigDecimal( 3 );
                  
                   //print ("FirstCid => " + FirstCid + " FirstAddress => " + FirstAddress + " FirstSumma3 => " + FirstSumma3 + "\n" +
                   //" SecondCid => " + SecondCid + " SecondAddress => " + SecondAddress + " SecondSumma3 => " + SecondSumma3 );
                  DiffCid = SecondCid - FirstCid;
                  DiffSumma3 = SecondSumma3.subtract(FirstSumma3);
                  print ("Адресс  " + FirstAddress + "  абоненты " + DiffCid + " Наработка " +  DiffSumma3 + " абоненты " + FirstCid + " Наработка " +
                  FirstSumma3 + " абоненты " + SecondCid + " Наработка " + SecondSumma3);
                  //print("кол-во 1 " +i + "\n" + "кол-во 2 " +j + "cid " +FirstCid);
             }
       print("кол-во " +i );
   }
}

Вот что сделать нужно, но при первой же выборке FirstCid = FirstRs.getInt( 1 ); уже дает не те данные,, когда делаю просто sql запрос, то все выводится правильно, а вот если вот так скриптом - то не верно

Автор:  aardvark [ 06 май 2013, 13:12 ]
Заголовок сообщения:  Re: сравнить данные из 2-х запросов

скинуть результаты запросов в массивы, отсортировать, а потом сравнить пробовал?
у меня есть подозрение, что всё дело в том как драйвер обрабатывает group by расширения mysql.

Автор:  skyb [ 27 май 2013, 06:54 ]
Заголовок сообщения:  Re: сравнить данные из 2-х запросов

aardvark писал(а):
скинуть результаты запросов в массивы, отсортировать, а потом сравнить пробовал?
у меня есть подозрение, что всё дело в том как драйвер обрабатывает group by расширения mysql.

неа, да вроде тот запрос, который навояли в конфе подходит, ещё поковыряю

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/