Rails/SQL:统计具有特定状态的连续记录数

Rails/SQL:统计具有特定状态的连续记录数,sql,ruby-on-rails,ruby,postgresql,Sql,Ruby On Rails,Ruby,Postgresql,我试图计算连续请求的组数,具有特定的状态 Example: Request 1 status=bad Request 2 status=good Request 3 status=good Request 4 status=bad Request 5 status=bad Request 6 status=bad Request 7 status=good Request 8 status=bad 我们这里有两组连续的好数据:[2,3]和[7] 然后,目标是使result=2 以下是我现在正

我试图计算连续请求的组数,具有特定的状态

Example:

Request 1 status=bad
Request 2 status=good
Request 3 status=good
Request 4 status=bad
Request 5 status=bad
Request 6 status=bad
Request 7 status=good
Request 8 status=bad
我们这里有两组连续的好数据:[2,3]和[7]

然后,目标是使result=2

以下是我现在正在使用的:

Request.group("date(created_at)").count
结果是:

SELECT COUNT(*) AS count_all, date(created_at) AS date_created_at FROM "requests" GROUP BY date(created_at)

{Wed, 07 Aug 2019=>240, Mon, 05 Aug 2019=>245, Tue, 06 Aug 2019=>511}
但这会计算所有请求,而不是连续良好的请求数。

试试这个

这就是结果

a = {[Fri, 15 Jun 2012, "good"]=2, [Fri, 30 Jan 2015, "good"]=>1, [Thu, 02 Oct 2008, "bad"]=>3, [Thu, 26 Jul 2018, "good"]=>1}
试试这个

这就是结果

a = {[Fri, 15 Jun 2012, "good"]=2, [Fri, 30 Jan 2015, "good"]=>1, [Thu, 02 Oct 2008, "bad"]=>3, [Thu, 26 Jul 2018, "good"]=>1}

你可以创建块,然后像这样计数

Request.order("created_at").all.map(&:status).chunk{|status| status=="good"}.count{|good_group_count,arr| good_group_count}
此外,我们可以只选择状态列来优化查询,如下所示

Request.order("created_at").select("status").map(&:status).chunk{|status| status=="good"}.count{|good_group_count,arr| good_group_count}

你可以创建块,然后像这样计数

Request.order("created_at").all.map(&:status).chunk{|status| status=="good"}.count{|good_group_count,arr| good_group_count}
此外,我们可以只选择状态列来优化查询,如下所示

Request.order("created_at").select("status").map(&:status).chunk{|status| status=="good"}.count{|good_group_count,arr| good_group_count}

谢谢,但这不起作用,它只计算每个状态的数量,而不是连续商品的数量。谢谢,但这不起作用,它只计算每个状态的数量,而不是连续商品的数量。你能添加吗。wherestatus:好到你的查询中吗?Request.wherestatus:good.groupdatecreated\u at.count您是否可以将.wherestatus:good添加到您的查询中?Request.wherestatus:good.groupdatecreated\u at.count