我正在尝试计算一个字段的连续重复值,以便获得表中每个人的最大重复出现次数。例如:
Time person Result
08:12:36 Dave Heads
08:12:37 Dave Heads
08:12:39 Sue Tails
08:12 41 Dave Tails
08:12:42 Dave Heads
08:12:44 Dave Heads
08:12:45 Sue Heads
08:12:46 Sue Heads
08:12:47 Sue Tails
08:12:48 Dave Heads
08:12:49 Dave Heads
08:12:50 Dave Tails
08:12:51 John Heads
结果应该是这样的
Dave 4
Sue 2
John 1
在 08:12:42 和 08:12:49 之间,Dave 的计数将为 4,在 Dave 获得反面选项之前,Dave 会出现 4 个正面选项。
SQL小提琴。
结果完全符合要求。
在形成
grp
连续对(person, result)
的组 () 之后,计数必须是每对 和组(person, result, grp)
,而不仅仅是每个人和组(person, grp)
。可以(并且将会)有一个组,每个人和结果的组数相同,这些必须单独计算。此外,在这里使用CTE效率不高。在 Postgres 中,子查询的性能通常优于子查询,因为 CTE 是始终具体化结果的优化栅栏。仅在实际需要时使用 CTE。