Проблема с запросом 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, время: 05:37. |