如何使用ActiveRecord在Rails中编写正确的MySQL子查询?

时间:2012-05-16 23:31:02

标签: mysql ruby-on-rails subquery

我不确定我的问题是我写的MySQL是错误的,还是我错误地使用ActiveRecord的子查询。

这是背景:
历史就是表。历史记录包含'id','user_id','state'和'created_at'。用户在历史记录中可能不止一次具有相同的状态。

这是我要拉的:
在某一天,找到第一次取消订阅的用户。

这是我最初写的不准确的查询:

History.select('distinct user_id').where(state: 'unsubscribed').where('date(created_at) = ?', Date.today).all

这给了我今天取消订阅的人数,但不是今天第一次取消订阅的人数。如果有人在30天前取消订阅并且今天再次取消订阅,那么他们就会出现在这组结果中。

我知道如何使用Ruby通过执行两个查询和一些数组减法来找到结果集。我的问题是,如何使用1个查询/子查询来提取这些结果。这是我的尝试不起作用:

sub_query = "(SELECT MIN(h.created_at) FROM history AS h WHERE h.state = 'unsubscribed' AND h.user_id = history.user_id)"
History.where('date(created_at) = ?', Date.today).where("history.user_id IN (#{sub_query})").all


那是否接近正确的方法?我应该做一个子选择吗?我应该只用纯SQL编写查询,然后使用ActiveRecord :: Base.connection.execute()?任何帮助都会有所帮助,非常感谢。

0 个答案:

没有答案