Я пытаюсь извлечь сумму измененного поля истории, ограниченную 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;
@Tim Biegeleisen Цель состоит в том, чтобы ограничить до 100, не имеет значения, следует ли использовать «лимит» или нет – Vadym
Я не думаю group_concat можно использовать так, как вы пытаетесь. group_concat создает строку, разделенную запятой. Итак, начало вашего, где выглядит так: 'WHERE '60' IN ('10, 20,40,60 ')'. Вероятно, вы можете изменить этот подсегмент на '(SELECT charge_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100)' – CptMisery
Ограничение @CptMisery в подзапросе невозможно в mysql. Кроме того, я изменил запрос, но он все равно не дает мне ожидаемого результата – Vadym