如果连续3次出现,如何获得价值和数量

时间:2016-02-05 09:40:44

标签: mysql

我有3列的表,现在如果它立即出现3次,如何找到值

即第一次trnas_value连续3次出现(重复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

1 个答案:

答案 0 :(得分: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