修正履歴フィールドの合計を100で制限し、各アカウントでグループ化しましたが、下のクエリはCDR_Accountsからすべての行の合計をcharged_quantity = 60で抽出し、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 charged_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100) 'に変更することができます。 – CptMisery
サブクエリの@CptMisery制限はmysqlでは不可能です。また、私は、クエリを変更しましたが、それでも私は期待した結果を与えません – Vadym