让我来定义问题很棘手,也许你通过我的虚拟数据了解它 。
我有这些数据:
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的链接,此任务单独计算 ,这可能吗?
答案 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;