2016-10-18 12 views
-1

修正履歴フィールドの合計を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; 
+0

@Tim Biegeleisen目的は100に制限され、制限を使用するかどうかは関係ありません – Vadym

+0

私は思いませんあなたが試している方法でgroup_concatを使うことができます。 group_concatは、コンマ区切りの文字列を作成します。ですから、あなたの場所の始まりは、次のようになります: 'WHERE '60' IN('10,20,40,60 ')'。おそらくそのサブセレクトを '(SELECT charged_quantity FROM CDR_Accounts GROUP BY i_account LIMIT 100) 'に変更することができます。 – CptMisery

+0

サブクエリの@CptMisery制限はmysqlでは不可能です。また、私は、クエリを変更しましたが、それでも私は期待した結果を与えません – Vadym

答えて

0

私はあなたのクエリがされて何をするかについては明らかではありませんよ。ただし、グループ化を含む最終結果には制限が適用されます。 GROUP_CONCATの結果を制限する必要がある場合は、最初に制限を適用してグループを適用します。

+0

サブクエリの制限が機能していません – Vadym

関連する問題