2016-02-05 30 views
2

我已經表3列,如果現在看來接下來的3倍如何尋找價值立即如何獲得價值和計數,如果出現下一個連續3次

即1 trnas_value出現在接下來的連續3次(repeaded 4次) 和第2和第6行也也重複同樣的

date    tran_val    name 
23mar    22     mark 
24mar    22     mark 
25mar    22     mark 
26mar    22     mark 
27mar    22     mark 
28jan    99     john 
29jan    99     john 
30jan    99     john 
31jan    99     john 

輸出

name  trans_value  consecutive_count 
mark  22     2 
john  99     1 
+0

接下來3次是什麼意思?沒有指定訂單,並且記錄的默認訂單在/中顯示爲不一致。如果數據對於返回的訂單有意義,那麼這將是可能的。 – Kickstart

+0

@kickstart接下來的3次意味着第一個和第二個值重複3次 – su919

+0

即第一個值22在2,3,4行中重複3次,if你拿第二個值22也是在第3,4,5行重新排列,但是第3個值不會重複下3次 – su919

回答

1

基本辦法做到這一點是添加序號,按包含相關訂單的字段進行排序。

我不確定計數,但最簡單的方法似乎是從連續計數中減去3。

SELECT name, 
     tran_val, 
     MAX(cnt - 3) AS consecutive_count 
FROM 
(
    SELECT date, 
      tran_val, 
      name, 
      @cnt:=IF(@tran_val=tran_val AND @name=name, @cnt + 1, 1) AS cnt, 
      @tran_val:=tran_val, 
      @name:=name 
    FROM some_table 
    CROSS JOIN (SELECT @cnt:=0, @tran_val:=0, @name:='') sub0 
    ORDER BY `date` 
) sub1 
GROUP BY name, 
     tran_val 
+0

名\t tran_val \t consecutive_count分類 約翰 -1 標記 0這個我得到的輸出 – su919

+0

但它沒有匹配原始輸出,是否有任何其他方式.. – su919

+0

當我用你的原始數據嘗試它時,我得到你所做的輸出(我認爲日期列是DATE類型列) – Kickstart

相關問題