forum.bitel.ru http://forum.bitel.ru/ |
|
Помогите с SQL запросом http://forum.bitel.ru/viewtopic.php?f=19&t=5303 |
Страница 1 из 2 |
Автор: | max [ 24 мар 2011, 14:05 ] |
Заголовок сообщения: | Помогите с SQL запросом |
Доброго времени суток! Стоит задача выудить из биллинга номер телефона контракта, сумма баланса на начало месяца если абонент не заплатил, для системы автоматического обзвона должников, попытался наваять запрос, но он не пашет, так как ошибочный, а знаний пока в этой области маловато, помогите кто чем может вот что у меня получилось: Код: select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract_parameter_type_9 AS Phone, LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 order by phone.phone1 заранее спасибо |
Автор: | Phricker [ 24 мар 2011, 14:12 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
Какая версия биллинга? Если судить по contract_parameter_type_9 то 4.6 потому что в 5.1. другие таблицы. Прав? |
Автор: | max [ 24 мар 2011, 15:03 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
нет, 5.0 |
Автор: | skn [ 24 мар 2011, 15:10 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
Код: select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5
from contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 order by phone.phone1 |
Автор: | max [ 24 мар 2011, 15:20 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
спс! дело было в заглавной букве и запятой! |
Автор: | skyb [ 24 мар 2011, 15:37 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
мож на вики? чтоб не потерялся? |
Автор: | max [ 24 мар 2011, 15:41 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
а как можно в этот запрос интегрировать вот этот? SELECT cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance, contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title идея состоит в том что мне нужно сделать выборку номеров телефонов должников, и сумму задолжности, код выше выводит номер договора, имя, и сумму задолжности.... |
Автор: | max [ 24 мар 2011, 15:41 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
skyb писал(а): мож на вики? чтоб не потерялся? дык обязательно как закончу, так как первый запрос это тока 50% от цели... |
Автор: | skyb [ 24 мар 2011, 15:42 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
max писал(а): skyb писал(а): мож на вики? чтоб не потерялся? дык обязательно как закончу, так как первый запрос это тока 50% от цели... ждем |
Автор: | max [ 24 мар 2011, 15:43 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
to skyb может поможешь? а то я не силён в SQL. начал писать на виккки http://wiki.bgbilling.ru/index.php/%D0% ... 1%81%D1%8B |
Автор: | skyb [ 24 мар 2011, 15:50 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
max писал(а): to skyb может поможешь? а то я не силён в SQL. стукни в аську, мож че придумаем .... а то мозг разлагаться стал в отпуске |
Автор: | max [ 24 мар 2011, 17:43 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
стукнул |
Автор: | max [ 25 мар 2011, 15:44 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
совместно со skyb был наваян следующий код Код: import bitel.billing.server.util.*; import bitel.billing.server.contract.bean.*; import java.sql.*; import java.math.*; public void main( setup, con, conSlave ) { String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title"; PreparedStatement ps = con.prepareStatement( query_dolg ); ResultSet rs = ps.executeQuery(); int id; int summa; while( rs.next() ) { String title = rs.getString("title"); String comment = rs.getString("comment"); summa = rs.getInt("summa1"); id = rs.getInt("id"); print ("title -> " + title); print ("comment -> " + comment); print ("summa -> " + summa); print ("id -> " + id); } rs.close(); ps.close(); String query = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = "+id+" and contract.id order by phone.phone1"; PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); while( rs.next() ) { String phone = rs.getString("phone1"); String phone1 = rs.getString("phone2"); String phone2 = rs.getString("phone3"); String phone3 = rs.getString("phone4"); String phone4 = rs.getString("phone5"); print ("phone1 -> " + phone); print ("phone2 -> " + phone1); print ("phone3 -> " + phone2); print ("phone4 -> " + phone3); print ("phone5 -> " + phone4); } rs.close(); ps.close(); } однако он не закончен, так как skyb в отпуске, а я в програмировании не шарю. У меня есть жгучее желание всётаки обойтись не скриптом, а единым SQL запросом, но я незнаю как... |
Автор: | snark [ 26 мар 2011, 19:20 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
типа того: Код: import bitel.billing.server.util.*;
import bitel.billing.server.contract.bean.*; import java.sql.*; import java.math.*; public void main( setup, con, conSlave ) { String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title"; String query = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = ? and contract.id order by phone.phone1"; PreparedStatement ps_dolg = con.prepareStatement(query_dolg); ResultSet rs_dolg = ps.executeQuery(); int id; int summa; String title = ""; String comment = ""; String phone = ""; String phone1 = ""; String phone2 = ""; String phone3 = ""; String phone4 = ""; while(rs_dolg.next()) { title = rs_dolg.getString("title"); comment = rs_dolg.getString("comment"); summa = rs_dolg.getInt("summa1"); id = rs_dolg.getInt("id"); print ("title -> " + title); print ("comment -> " + comment); print ("summa -> " + summa); print ("id -> " + id); PreparedStatement ps = con.prepareStatement( query ); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); phone = rs.getString("phone1"); phone1 = rs.getString("phone2"); phone2 = rs.getString("phone3"); phone3 = rs.getString("phone4"); phone4 = rs.getString("phone5"); print ("phone1 -> " + phone); print ("phone2 -> " + phone1); print ("phone3 -> " + phone2); print ("phone4 -> " + phone3); print ("phone5 -> " + phone4); } } |
Автор: | max [ 27 мар 2011, 00:56 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
snark писал(а): типа того: Код: import bitel.billing.server.util.*; import bitel.billing.server.contract.bean.*; import java.sql.*; import java.math.*; public void main( setup, con, conSlave ) { String query_dolg = "SELECT cnt.id, cnt.title, cnt.comment, balance.summa1 FROM contract_balance AS balance,contract AS cnt LEFT JOIN contract_payment AS pay ON cnt.id = pay.cid AND pay.dt BETWEEN '2011-03-01' AND '2011-03-31' WHERE pay.id IS NULL AND cnt.date2 IS NULL AND cnt.gr = gr & (1 << 2) AND balance.cid = cnt.id AND balance.yy = '2011' AND balance.mm = '3' AND balance.summa1 < 0 ORDER BY cnt.title"; String query = "select phone.phone1,phone.phone2,phone.phone3,phone.phone4,phone.phone5 from contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 as flag ON flag.cid = phone.cid where flag.pid=42 and flag.val=1 and contract.id = ? and contract.id order by phone.phone1"; PreparedStatement ps_dolg = con.prepareStatement(query_dolg); ResultSet rs_dolg = ps.executeQuery(); int id; int summa; String title = ""; String comment = ""; String phone = ""; String phone1 = ""; String phone2 = ""; String phone3 = ""; String phone4 = ""; while(rs_dolg.next()) { title = rs_dolg.getString("title"); comment = rs_dolg.getString("comment"); summa = rs_dolg.getInt("summa1"); id = rs_dolg.getInt("id"); print ("title -> " + title); print ("comment -> " + comment); print ("summa -> " + summa); print ("id -> " + id); PreparedStatement ps = con.prepareStatement( query ); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); phone = rs.getString("phone1"); phone1 = rs.getString("phone2"); phone2 = rs.getString("phone3"); phone3 = rs.getString("phone4"); phone4 = rs.getString("phone5"); print ("phone1 -> " + phone); print ("phone2 -> " + phone1); print ("phone3 -> " + phone2); print ("phone4 -> " + phone3); print ("phone5 -> " + phone4); } } не не катит COMPLETE_TIME: 26.03.11 23:55:28 PROCESS_TIME: 20 OUT: ERROR: EXCEPTIONS: Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps : at Line: 12 : in file: snark : ps .executeQuery ( ) Called from method: main : at Line: -1 : in file: <Called from Java Code> : <Compiled Java Code> at bsh.UtilEvalError.toEvalError(Unknown Source) at bsh.UtilEvalError.toEvalError(Unknown Source) at bsh.BSHMethodInvocation.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHVariableDeclarator.eval(Unknown Source) at bsh.BSHTypedVariableDeclaration.eval(Unknown Source) at bsh.BSHBlock.evalBlock(Unknown Source) at bsh.BSHBlock.eval(Unknown Source) at bsh.BshMethod.invokeImpl(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65) at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36) at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33) WARNINGS: |
Автор: | dimOn [ 27 мар 2011, 15:06 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
Цитата: Typed variable declaration : Attempt to resolve method: executeQuery() on undefined variable or class name: ps Ну видно же, что тут косяк, что уж вы.... Код: PreparedStatement ps_dolg = con.prepareStatement(query_dolg);
ResultSet rs_dolg = ps.executeQuery(); |
Автор: | max [ 27 мар 2011, 15:29 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
к сожалению не шарю в программировании, поэтому это для меня не очевидно! более того даже указание на ошибку не говорит мне о том что тут нада поправить.... |
Автор: | dimOn [ 28 мар 2011, 02:42 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
ps на ps_dolg |
Автор: | snark [ 28 мар 2011, 11:37 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
код вообще писался на коленке и поэтому не факт что будет работать, хотя по идее должен ... меня больше волнует другое - Вы уверены что запрос, который в "query" Код: SELECT phone.phone1, phone.phone2, phone.phone3, phone.phone4, phone.phone5 FROM contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 AS flag ON flag.cid = phone.cid WHERE flag.pid = 42 AND flag.val = 1 AND contract.id = ? AND contract.id ORDER BY phone.phone1 вообще работает? я думаю что из за Код: contract.id = ? AND contract.id оно будет выдавать ошибку SQL (ид контракта такой то ... и ... и ЧТО?!?) ... пропрбуйте вместо восклицательного знака "?" поставить ID какого нить договора и запустите этот запрос в косоли MySQL, а потом покажите что он выдаст dimOn писал(а): ps на ps_dolg да |
Автор: | max [ 28 мар 2011, 15:18 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
dimOn писал(а): ps на ps_dolg теперь даёт выхлоп COMPLETE_TIME: 28.03.11 15:18:08 PROCESS_TIME: 73 OUT: title -> ТФ-07-0001-В comment -> ТСЖ "Наш Дом" summa -> -711 id -> 123 ERROR: EXCEPTIONS: Method Invocation rs.getString Method Invocation rs.getString : at Line: 42 : in file: snark : rs .getString ( "phone1" ) Target exception: java.sql.SQLException: Before start of result set at bsh.BSHMethodInvocation.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHAssignment.eval(Unknown Source) at bsh.BSHBlock.evalBlock(Unknown Source) at bsh.BSHBlock.eval(Unknown Source) at bsh.BSHBlock.eval(Unknown Source) at bsh.BSHWhileStatement.eval(Unknown Source) at bsh.BSHBlock.evalBlock(Unknown Source) at bsh.BSHBlock.eval(Unknown Source) at bsh.BshMethod.invokeImpl(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65) at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36) at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33) WARNINGS: |
Автор: | max [ 28 мар 2011, 15:23 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
snark писал(а): код вообще писался на коленке и поэтому не факт что будет работать, хотя по идее должен ... меня больше волнует другое - Вы уверены что запрос, который в "query" Код: SELECT phone.phone1, phone.phone2, phone.phone3, phone.phone4, phone.phone5 FROM contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 AS flag ON flag.cid = phone.cid WHERE flag.pid = 42 AND flag.val = 1 AND contract.id = ? AND contract.id ORDER BY phone.phone1 вообще работает? я думаю что из за Код: contract.id = ? AND contract.id оно будет выдавать ошибку SQL (ид контракта такой то ... и ... и ЧТО?!?) ... пропрбуйте вместо восклицательного знака "?" поставить ID какого нить договора и запустите этот запрос в косоли MySQL, а потом покажите что он выдаст dimOn писал(а): ps на ps_dolg да выполнил вот такой код Код: SELECT phone.phone1, phone.phone2, phone.phone3, phone.phone4, phone.phone5 FROM contract, contract_parameter_type_9 AS phone LEFT JOIN contract_parameter_type_5 AS flag ON flag.cid = phone.cid WHERE flag.pid = 42 AND flag.val = 1 AND contract.id = 100 AND contract.id ORDER BY phone.phone1 результат такой Код: 79222349158 73512610311 73519046043 79222317114 79090760990 79227106197 79222317114 79090760990 79193139776 79028901676 79630742833 79127992055 73519027405 73517259860 79630887357 79525089337 79127992055 73519027405 79193399111 79227130055 79026037191 73517371925 79823166224 79068014888 73512471747 79127792591 79226300333 79068643610 79517777193 79227040583 79525089337 79127983578 79127919693 79630742833 79227028840 79127983578 73512610311 73519046043 73432222222 73432172662 73512111222 но как мне видится это не то что нада... вообще идея была сделать это всё не скриптом, а одним SQL запросом! который бы удовлетворял след условиям: [b]1. вход. остаток на начало месяца меньше нуля. 2. Нет платежей в текущем месяце. 3. В свойствах договора установлен флаг "включить в программу обзвона должников". [b/] |
Автор: | snark [ 28 мар 2011, 15:42 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone по идее этот код должен заработать Код: import bitel.billing.server.util.*; import bitel.billing.server.contract.bean.*; import java.sql.*; import java.math.*; public void main( setup, con, conSlave ) { String query_dolg = "SELECT c.id, c.title, c.comment, cb.summa1 FROM contract_balance AS cb, contract AS c LEFT JOIN contract_payment AS pay ON c.id = cp.cid WHERE (cp.dt BETWEEN '2011-03-01' AND '2011-03-31') AND cp.id IS NULL AND c.date2 IS NULL AND c.gr = gr & (1 << 2) AND cb.cid = c.id AND cb.yy = '2011' AND cb.mm = '3' AND cb.summa1 < 0 ORDER BY c.title"; String query = "SELECT cpt9.phone1, cpt9.phone2, cpt9.phone3, cpt9.phone4, cpt9.phone5 FROM contract, contract_parameter_type_9 AS cpt9 LEFT JOIN contract_parameter_type_5 AS flag ON cpt5.cid = cpt9.cid WHERE cpt5.pid = 42 AND cpt5.val = 1 AND contract.id = ? ORDER BY cpt9.phone1"; PreparedStatement ps_dolg = con.prepareStatement(query_dolg); ResultSet rs_dolg = ps_dolg.executeQuery(); int id; int summa; String title = ""; String comment = ""; String phone = ""; String phone1 = ""; String phone2 = ""; String phone3 = ""; String phone4 = ""; while(rs_dolg.next()) { id = rs_dolg.getInt("id"); title = rs_dolg.getString("title"); comment = rs_dolg.getString("comment"); summa = rs_dolg.getInt("summa1"); print ("id -> " + id); print ("title -> " + title); print ("comment -> " + comment); print ("summa -> " + summa); PreparedStatement ps = con.prepareStatement(query); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); phone1 = rs.getString("phone1"); phone2 = rs.getString("phone2"); phone3 = rs.getString("phone3"); phone4 = rs.getString("phone4"); phone5 = rs.getString("phone5"); print ("phone1 -> " + phone1); print ("phone2 -> " + phone2); print ("phone3 -> " + phone3); print ("phone4 -> " + phone4); print ("phone5 -> " + phone5); } } проверить не на чем - у меня (пока) нету 5.1 я чуть изменил запросы и поправил переменные |
Автор: | max [ 28 мар 2011, 15:59 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
snark писал(а): тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone по идее этот код должен заработать Код: import bitel.billing.server.util.*; import bitel.billing.server.contract.bean.*; import java.sql.*; import java.math.*; public void main( setup, con, conSlave ) { String query_dolg = "SELECT c.id, c.title, c.comment, cb.summa1 FROM contract_balance AS cb, contract AS c LEFT JOIN contract_payment AS pay ON c.id = cp.cid WHERE (cp.dt BETWEEN '2011-03-01' AND '2011-03-31') AND cp.id IS NULL AND c.date2 IS NULL AND c.gr = gr & (1 << 2) AND cb.cid = c.id AND cb.yy = '2011' AND cb.mm = '3' AND cb.summa1 < 0 ORDER BY c.title"; String query = "SELECT cpt9.phone1, cpt9.phone2, cpt9.phone3, cpt9.phone4, cpt9.phone5 FROM contract, contract_parameter_type_9 AS cpt9 LEFT JOIN contract_parameter_type_5 AS flag ON cpt5.cid = cpt9.cid WHERE cpt5.pid = 42 AND cpt5.val = 1 AND contract.id = ? ORDER BY cpt9.phone1"; PreparedStatement ps_dolg = con.prepareStatement(query_dolg); ResultSet rs_dolg = ps_dolg.executeQuery(); int id; int summa; String title = ""; String comment = ""; String phone = ""; String phone1 = ""; String phone2 = ""; String phone3 = ""; String phone4 = ""; while(rs_dolg.next()) { id = rs_dolg.getInt("id"); title = rs_dolg.getString("title"); comment = rs_dolg.getString("comment"); summa = rs_dolg.getInt("summa1"); print ("id -> " + id); print ("title -> " + title); print ("comment -> " + comment); print ("summa -> " + summa); PreparedStatement ps = con.prepareStatement(query); ps.setInt(1, id); ResultSet rs = ps.executeQuery(); phone1 = rs.getString("phone1"); phone2 = rs.getString("phone2"); phone3 = rs.getString("phone3"); phone4 = rs.getString("phone4"); phone5 = rs.getString("phone5"); print ("phone1 -> " + phone1); print ("phone2 -> " + phone2); print ("phone3 -> " + phone3); print ("phone4 -> " + phone4); print ("phone5 -> " + phone5); } } проверить не на чем - у меня (пока) нету 5.1 я чуть изменил запросы и поправил переменные у меня тоже не 5.1 а 5.0! |
Автор: | snark [ 28 мар 2011, 16:36 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
max писал(а): snark писал(а): тут я не нашел contract_parameter_type_9, там есть только contract_parameter_type_phone ... проверить не на чем - у меня (пока) нету 5.1 у меня тоже не 5.1 а 5.0! скажите главное - работает или нет? |
Автор: | max [ 28 мар 2011, 23:49 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
нет не работает, вот выхлоп Код: COMPLETE_TIME: 28.03.11 23:47:57 PROCESS_TIME: 21 OUT: ERROR: EXCEPTIONS: Typed variable declaration : Method Invocation ps_dolg.executeQuery Typed variable declaration : Method Invocation ps_dolg.executeQuery : at Line: 12 : in file: snark2 : ps_dolg .executeQuery ( ) Called from method: main : at Line: -1 : in file: <Called from Java Code> : <Compiled Java Code> Target exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cp.dt' in 'where clause' at bsh.BSHMethodInvocation.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHPrimaryExpression.eval(Unknown Source) at bsh.BSHVariableDeclarator.eval(Unknown Source) at bsh.BSHTypedVariableDeclaration.eval(Unknown Source) at bsh.BSHBlock.evalBlock(Unknown Source) at bsh.BSHBlock.eval(Unknown Source) at bsh.BshMethod.invokeImpl(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.BshMethod.invoke(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at bsh.This.invokeMethod(Unknown Source) at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.invoke(ScriptInstance.java:329) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScriptImpl(GlobalScriptMachine.java:130) at bitel.billing.server.script.global.bean.GlobalScriptMachine.runScript(GlobalScriptMachine.java:65) at bitel.billing.server.script.global.bean.GlobalScriptManager.executeGlobalScript(GlobalScriptManager.java:36) at bitel.billing.server.script.global.ActionExecuteScript$1ScriptThread.run(ActionExecuteScript.java:33) WARNINGS: не нашли потому что в 5.1 нету такой таблицы, а вот если вы в верхнем правом углу там переключите на 5.0 то таблица появится. |
Автор: | snark [ 29 мар 2011, 16:47 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
max писал(а): нет не работает Код: Target exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'cp.dt' in 'where clause' вот такой запрос у Вас отрабатывает? Код: SELECT
c.id, c.title, c.comment, cb.summa1 FROM contract_balance AS cb, contract AS cnt LEFT JOIN contract_payment AS cp ON c.id = cp.cid WHERE cp.id IS NULL AND (cp.dt BETWEEN '2011-03-01' AND '2011-03-31') AND c.date2 IS NULL AND c.gr = gr & (1 << 2) AND cb.cid = c.id AND cb.yy = '2011' AND cb.mm = '3' AND cb.summa1 < 0 ORDER BY c.title |
Автор: | snark [ 29 мар 2011, 17:19 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
max писал(а): 1. вход. остаток на начало месяца меньше нуля. 2. Нет платежей в текущем месяце. это все у кого входящий остаток меньше либо равен нулю Код: SELECT cid FROM contract_balance WHERE summa1 <= 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) это все у кого нет платежей Код: SELECT cid FROM contract_balance WHERE summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) много, да? ну тогда оставим только тех у кого входящий остаток меньше либо равен нулю и небыло платежей: Код: SELECT cid FROM contract_balance WHERE summa1 <= 0 AND summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) получится не такое уж и большое кол-во договоров ... а кто это? да вот кто: Код: SELECT title FROM contract WHERE id IN ( SELECT cid FROM contract_balance WHERE summa1 <= 0 AND summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) ) но сюда попали и договора у которых режим "кредит" чтобы их отсеять - возьмем только тех у кого режим "дебет": Код: SELECT title FROM contract WHERE id IN ( SELECT cid FROM contract_balance WHERE summa1 <= 0 AND summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) ) AND mode = 1 осталось не так уж и много эти запросы учитывают _только_ текущий месяц и год, а т.к. записи в таблице contract_balance создаются только при наличии движения $ на счету, то эти запросы надо дорисовать чтобы можно было найти еще и тех у кого есть долги за прошлые месяцы и это, а еще это: max писал(а): 3. В свойствах договора установлен флаг "включить в программу обзвона должников". я, с Вашего позволения, оставлю Вам в качестве домашнего задания |
Автор: | max [ 30 мар 2011, 00:54 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
snark гранд мерси! домашнее задание выполню но естиь вопросег! как в этом запросе получить ещё сумму вход остатка ? |
Автор: | snark [ 30 мар 2011, 15:38 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
это: Код: SELECT cid FROM contract_balance WHERE ... возвращает ID-ы юзеров, а это: Код: SELECT cid, summa1 FROM contract_balance WHERE ... вернет помимо ID-ов юзеров еще и входящий остаток, но ... НО! но использовать summa1 в этом запросе Код: SELECT title FROM contract WHERE id IN ( SELECT cid FROM contract_balance WHERE summa1 <= 0 AND summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) ) AND mode = 1 нельзя, потому что список ID-ов тут служат основанием для выборки ... что делать? переписать! Код: SELECT
c.title, cb.summa1 FROM contract AS c LEFT JOIN contract_balance AS cb ON (c.id = cb.cid) WHERE c.mode = 1 AND cb.summa1 <= 0 AND cb.summa2 = 0 AND cb.yy = YEAR(NOW()) AND cb.mm = MONTH(NOW()) |
Автор: | max [ 30 мар 2011, 16:58 ] |
Заголовок сообщения: | Re: Помогите с SQL запросом |
snark писал(а): это: Код: SELECT cid FROM contract_balance WHERE ... возвращает ID-ы юзеров, а это: Код: SELECT cid, summa1 FROM contract_balance WHERE ... вернет помимо ID-ов юзеров еще и входящий остаток, но ... НО! но использовать summa1 в этом запросе Код: SELECT title FROM contract WHERE id IN ( SELECT cid FROM contract_balance WHERE summa1 <= 0 AND summa2 = 0 AND yy = YEAR(NOW()) AND mm = MONTH(NOW()) ) AND mode = 1 нельзя, потому что список ID-ов тут служат основанием для выборки ... что делать? переписать! Код: SELECT c.title, cb.summa1 FROM contract AS c LEFT JOIN contract_balance AS cb ON (c.id = cb.cid) WHERE c.mode = 1 AND cb.summa1 <= 0 AND cb.summa2 = 0 AND cb.yy = YEAR(NOW()) AND cb.mm = MONTH(NOW()) на основании твоего запроса попытался учесть влияние флага, и нифга не выходит, отписался в асю.... |
Страница 1 из 2 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |