2016-10-18 21 views
-1

我试图提取修改后的历史记录字段限制为100并按每个帐户分组的总和,但下面的查询从CDR_Accounts中提取带有charge_quantity = 60的所有行的总和,并且不会限制到100.GROUP_CONCAT限制为100个值不起作用

table1 = table2这些是临时表。我简化了查询并过滤了临时表中的所有数据。

尽管如此,查询仍然给我所有'历史'字段的总和,但是我只需要它们中的100个的总和。

表1 /表2格式:

+-----------+----------+------------+-------------+----------------------+ 
| 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创建一个逗号分隔的字符串。所以你的起点看起来像这样:'''''''''('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