0

运行这行代码

Activity.uniq.select(:ip).where("created_at > NOW() - INTERVAL 1 DAY").count

尽管 SQL 是正确的(使用 DISTINCT 关键字),但返回所有行的数量(没有唯一性过滤器)

如果我分两步运行此命令:

c = Activity.uniq.select(:ip).where("created_at > NOW() - INTERVAL 1 DAY")
c.size

然后我得到正确的计数。

怎么可能?

谢谢

4

1 回答 1

1

通常DISTINCT会从结果集中删除重复的结果,但不会进行任何分组。由于结果中有一行,COUNT因此您不会看到任何效果。你真正想要的是:

SELECT COUNT(DISTINCT activities.ip) FROM activities WHERE ...

请注意,您需要不同活动的计数而不是不同的计数。

我不确定你是如何使用 ActiveRecord 发出这个 SQL 的。connection您可能需要直接使用 ActiveRecord并select_value用于这种不寻常的查询,除非您可以指导select您这样做。

于 2013-02-20T08:04:24.083 回答