我有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
答案 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