2017-09-27 39 views
1

我們在表客戶中有兩列,其中有客戶ID和服務ID。因此,每個使用多種服務的客戶,都必須找到客戶使用的連續服務的最大數量。如何統計mysql中的連續重複行

我必須連續計算客戶使用的最大服務。

輸出:

Customerid|Serviceid|ServiceidCount 
---------------------------------- 

Nitesh|Mobile|2 
Nishant|Landline|3 
Soe|Mobile|2 
+4

SQL表代表*無序*集。沒有指定排序的列,你的問題沒有意義。 –

+0

我們怎樣才能知道訂單? – sagi

+1

...所以你需要另一列(日期,ID ...) – etsa

回答

0

讓我假設你有一個指定排序列,說id

然後你就可以做到這一點使用變量:

select customer, max(rn) as serviceidcnt, 
     substring_index(group_concat(serviceid order by rn desc)) as serviceid 
from (select c.*, 
      (@rn := if(@cs = concat_ws(':', customerid, serviceid), @rn + 1, 
         if(@cs := concat_ws(':', customerid, serviceid), 1, 1) 
         ) 
      ) as rn 
     from customer c cross join 
      (select @rn := 0, @cs := '') params 
     order by c.customer, ?? 
    ) cs 
group by customer; 

??是用於排序的列。

注意:獲取服務ID需要使用取決於group_concat()的MySQL「hack」。默認情況下,這僅限於大約1000字節的內部緩衝區大小。這可以改變。

+0

我試過這個。 不工作。 –

+0

它是如何「不工作」? –

0

更新版本

你可以試試下面的查詢。它使用mysql變量來檢查列customeridserviceid列中的連續更改。

SELECT customerid, serviceid, MAX(R)+1 AS ServiceIdCount 
FROM (SELECT c.customerid, c.serviceid 
    , CASE WHEN @s=CONCAT(customerid,'|',serviceid) THEN @r:[email protected]+1 ELSE @r:=0 END AS R 
    , @s:=CONCAT(customerid,'|',serviceid) AS S 
    FROM customer c 
    CROSS JOIN (SELECT @r:=0, @s:='') d 
    ORDER BY id 
    ) e 
WHERE R>0 
GROUP BY customerid, serviceid; 

增加的採樣數據(比你的其他):

insert into customer(customerid,serviceid) values('Mark','Mobile'); 
insert into customer(customerid,serviceid) values('Mark','Mobile'); 
insert into customer(customerid,serviceid) values('Mark','Mobile'); 
insert into customer(customerid,serviceid) values('Mark','Landline'); 
insert into customer(customerid,serviceid) values('Mark','Mobile'); 
insert into customer(customerid,serviceid) values('Mark','Mobile'); 

輸出:

+------------+-----------+----------------+ 
| customerid | serviceid | ServiceIdCount | 
+------------+-----------+----------------+ 
| Mark  | Mobile |    3 | 
| Nishant | Landline |    3 | 
| Nitesh  | Mobile |    2 | 
| Soe  | Mobile |    2 | 
+------------+-----------+----------------+ 
+0

@NiteshKataria查詢修改爲獲得MAX連續。 – etsa