2016-10-18 9 views
-1

Я пытаюсь извлечь сумму измененного поля истории, ограниченную 100 и сгруппированную по каждой учетной записи, но в нижеследующем запросе извлекается сумма всех строк из CDR_Accounts с charge_quantity = 60 и не ограничивается до 100.GROUP_CONCAT, ограничивающий 100 значений, не работает

table1 = table2, и это временные таблицы. Я упростил запрос и отфильтровал все данные во временных таблицах.

Тем не менее, запрос по-прежнему дает мне общую сумму всех полей истории, однако мне нужна сумма только для 100 из них.

формат table1/table2:

+-----------+----------+------------+-------------+----------------------+ 
| i_account | id  | account_id | CLD   | history    | 
+-----------+----------+------------+-------------+----------------------+ 
|  10272 | 46479968 | 0814781293 | 27815212963 | [email protected]%=1.32 | 
|  6316 | 46480100 | 0813741427 | 27780233136 | [email protected]%=1.32 | 
|  6316 | 46480107 | 0813741427 | 27780233136 | [email protected]%=1.32 | 
|  13830 | 46480435 | 0814346396 | 27781356515 | [email protected]%=1.32 | 
|  13830 | 46480436 | 0814346396 | 27781356515 | [email protected]%=1.32 | 
+-----------+----------+------------+-------------+----------------------+ 

Счет

SELECT sum(SUBSTRING_INDEX(history,'=',-1)), 
       cdr.i_account, 
       cdr.account_id 
     FROM table1 cdr 
      WHERE cdr.id IN 
       (SELECT SUBSTRING_INDEX(group_concat(s.id SEPARATOR ','), ',', 100) id 
       FROM table2 s 
       GROUP BY id 
       ) 
        GROUP BY i_account; 
+0

@Tim Biegeleisen Цель состоит в том, чтобы ограничить до 100, не имеет значения, следует ли использовать «лимит» или нет – Vadym

+0

Я не думаю group_concat можно использовать так, как вы пытаетесь. group_concat создает строку, разделенную запятой. Итак, начало вашего, где выглядит так: 'WHERE '60' IN ('10, 20,40,60 ')'. Вероятно, вы можете изменить этот подсегмент на '(SELECT charge_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100)' – CptMisery

+0

Ограничение @CptMisery в подзапросе невозможно в mysql. Кроме того, я изменил запрос, но он все равно не дает мне ожидаемого результата – Vadym

ответ

0

Я не ясно, о том, что ваш запрос делает. Однако предел применяется к окончательному результату, который также включает в себя группировку. если вам нужно ограничить результат GROUP_CONCAT, сначала примените предел, а затем примените группировку

+0

ограничение в подзапросах не работает – Vadym