Проблема с запросом SQL
Сижу вторые сутки и дико туплю. Господа, подскажите, как получить то, чего желаю..
Выбираю период (в одном и том же году). Например, с 1 января до 31 декабря 2013 года. Далее делаю SUM() для нужного столбца. Код: // Идентификатор объекта в городе foreach (json_decode($this->data['need_radio']) as $k=>$v) { $tempDataArray = []; $tempSumArray = []; $query = pg_query($this->connection," SELECT town_name FROM sprtowns WHERE town_id=".$v." ") or die($this->sendMessage(true,'Ошибка запроса. m:one:sprt_mult')); $tmp = pg_fetch_array($query); $queryPayment = pg_query($this->connection, " SELECT to_char(pay.date_pay::abstime::timestamp, 'mm-yyyy') as date, sum(pay.summ) as summ FROM payment as pay, orders as ord WHERE pay.date_pay>=".$from_date." AND pay.date_pay<=".$to_date." AND pay.dropped=0 AND pay.plan_pay=0 AND pay.order_id=ord.order_id AND ord.dogovor_town_id=".$v." AND ord.is_test_object=0 AND ord.type=1 AND ord.dropped=0 AND ord.org_id=1 GROUP BY date ") or die($this->sendMessage(true,'Ошибка запроса. m:one:qrypmnt_mult')); } Пример получаемых данных для г.Комсомольска-на-Амуре: Код:
date summ Код:
date summ Код:
date summ |
shareware, у тебя должна существовать таблица с записями "date", которые тебе нужны.
Либо придется "соединять" таблицы из одной записи SELECT name FROM users UNION SELECT name FROM orders в которой первый столбец-скаляр с нужным месяцем... А второй это результат запроса к другой таблице. Сколько нужно месяцев - столько и "соединений". |
Цитата:
А циклом через PHP можно такое провернуть ? Например, я сейчас костылить пытаюсь в таком формате: $old = 0; while ($res = pg_fetch_array($queryPayment)) { $tempDataArray[] = $res['date']; $tempSumArray[] = round($res['summ'],2); } $new = count($tempDataArray); // Сколько дат в массиве if ($old < $new){ $old = $new; }else{ $expl = explode('-',$tempDataArray[0]); // Берем номер месяца $i = 0; for ($i = 0; $i<=$old; $i++) { for ($j=$countSumArray; $j<=$old; $j++) { if ($i == (int)$expl[0]) { $tempSumArray[$j] = $oldSum[$i]; }else{ $tempSumArray[$j] = null; } } } } И оно вроде бы как работает..только наоборот, NULL добавляется не в нужные места, а после всех данных..не соображаю уже, а тут явная ошибка из за моей невнимательности, может вы увидите |
Цитата:
Можно просто завести такую таблицу-словарь. Тогда "главный" запрос делается к ней, год указывается как скаляр. А сумма - уже результат запроса к другой таблице с нужными параметрами. Цитата:
|
Цитата:
У меня свои ЯП в работе. Но с данными работаю давно и проблем с их обработкой не имею. |
Код:
sum(case when (`...` = '10') then `fields` end |
Часовой пояс GMT +3, время: 00:45. |