基于连续发生的组数据和计数

时间:2017-07-01 07:12:44

标签: mysql sql

让我来定义问题很棘手,也许你通过我的虚拟数据了解它

我有这些数据:

PK, TaskPK
1, 1    
2, 1     
3, 2    
4, 2    
5, 5    
6, 1 
7, 1     
8, 2 
9, 2   
10, 5    
11, 5

现在我必须计算TaskPK,我进行此查询

Select PK, TaskPK, Count(*)
From tbl
Group by TaskPK

我带来了这个结果

TaskPK, Count(*)
1, 4
2, 4
5, 3

但我想要略有不同的结果 喜欢这个

TaskPK, Count(*)
1, 2
2, 2
5, 1
1, 2
2, 2
5, 2

上述结果基于连续数据发生,因为TaskPK以1开始(它组合在一起),然后将其更改为2(它组合在一起),然后5(它组合在一起)taskPK。 但是当TaskPK再次转移到1时,它应该分组,而不是先前出现1的链接,此任务单独计算 ,这可能吗?

1 个答案:

答案 0 :(得分:0)

对于Mysql - 用户变量来跟踪连续的段。然后按这个由递增计数器跟踪的连续段进行分组,

SELECT MAX(TaskPK),COUNT(*)
FROM(SELECT PK,TaskPK,CASE WHEN  TaskPK=@TaskPK THEN @rn ELSE @rn:=@rn+1 END as g,
@TaskPK := TaskPK as task
FROM Test,(SELECT @rn:=0,@TaskPK:='')x
ORDER BY pk)z
GROUP BY g
ORDER BY pk;

See it working

相关问题