我們在表客戶中有兩列,其中有客戶ID和服務ID。因此,每個使用多種服務的客戶,都必須找到客戶使用的連續服務的最大數量。如何統計mysql中的連續重複行
我必須連續計算客戶使用的最大服務。
輸出:
Customerid|Serviceid|ServiceidCount
----------------------------------
Nitesh|Mobile|2
Nishant|Landline|3
Soe|Mobile|2
我們在表客戶中有兩列,其中有客戶ID和服務ID。因此,每個使用多種服務的客戶,都必須找到客戶使用的連續服務的最大數量。如何統計mysql中的連續重複行
我必須連續計算客戶使用的最大服務。
輸出:
Customerid|Serviceid|ServiceidCount
----------------------------------
Nitesh|Mobile|2
Nishant|Landline|3
Soe|Mobile|2
讓我假設你有一個指定排序列,說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字節的內部緩衝區大小。這可以改變。
我試過這個。 不工作。 –
它是如何「不工作」? –
更新版本
你可以試試下面的查詢。它使用mysql變量來檢查列customerid和serviceid列中的連續更改。
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 |
+------------+-----------+----------------+
@NiteshKataria查詢修改爲獲得MAX連續。 – etsa
SQL表代表*無序*集。沒有指定排序的列,你的問題沒有意義。 –
我們怎樣才能知道訂單? – sagi
...所以你需要另一列(日期,ID ...) – etsa