我如何获得这个复杂的查询?

时间:2014-12-08 20:47:25

标签: ruby-on-rails activerecord

company has_many customers
customer has_many messages
customer belongs_to company
company has_many messages
message belongs_to company
message belongs_to customer

可以发送消息"或者"收到"从列"方向"。

我想要找到的是#34;对话的数量"每天,对话被定义为客户发送至少一条消息并在一天内接收至少一条消息(不必按此顺序),除以付费公司的数量。

如何在活动记录中获得该信息?

1 个答案:

答案 0 :(得分:8)

让我们将查询分成几部分:

1。您需要在同一公司ID上加入消息表。

Message.joins("LEFT JOIN messages AS m ON messages.company_id = m.company_id")

2。对于发送消息并在同一天收到m的两个已加入消息的客户相同

.where("messages.direction = 'sent' AND m.direction = 'received' AND messages.customer_id = m.customer_id AND DATE(messages.created_at) = DATE(m.created_at)")

3。您需要每天向/从同一家公司获取每个客户发送和接收的uniq消息。

.select(" DISTINCT (messages.customer_id, messages.company_id, DATE(messages.created_at) )")

4。按创建日期计算分组

.group('Date(messages.created_at)').count

最终查询:

Message.joins("LEFT JOIN messages AS m ON messages.company_id = m.company_id").where("messages.direction = 'sent' AND m.direction = 'received' AND messages.customer_id = m.customer_id AND DATE(messages.created_at) = DATE(m.created_at)").select(" DISTINCT (messages.customer_id, messages.company_id, DATE(messages.created_at) )").group('Date(messages.created_at)').count