Active Record Rails查询

时间:2016-01-02 16:25:40

标签: mysql ruby-on-rails activerecord

有人可以帮我解决有关此问题的Rails查询

我有这样的mysql表。有一个娱乐俱乐部。 ticket_id是唯一的。每张票(会员)都有进入和退出。

我想确定特定的时间,里面有多少成员。假设我想在“2015-12-17 16:48:00”之前了解内部成员。

id    ticket_id  event_type  timestamp  

1739    869 entry   2015-12-17 15:09:51 

1740    869 entry   2015-12-17 17:46:55 

1730    864 exit    2015-12-17 16:48:27 

2 个答案:

答案 0 :(得分:1)

假设1:每个ticket_id可以有多个条目和退出。您提供的数据有ticket_id 869的2个条目。因此,ActiveQuery结果受uniq的约束。即使一个人在所需时间之前有多个条目(或退出),它们也只计算一次。

假设2:在某些情况下,在2个条目之间,可能无法捕获退出,如样本数据所示。由于这一点,结果中的一些差异可能会蔓延。

您可以使用以下查询来获取所有在某个特定时间点内的人,例如reqd_timestamp

@entered = Member.where("timestamp <= ? AND event_type = ?", 
                        reqd_timestamp, 'entry')
                 .pluck(:ticket_id).uniq 
@exited = Member.where("timestamp <= ? AND event_type = ?", 
                       reqd_timestamp, 'exit')
                .pluck(:ticket_id).uniq
@inside = (@entered - @exit).count

请注意,从ticket_id 869开始,2015-12-17 16:48:00将被计入内部,因为他在时间戳之前有entry id 1739。他实际上可能已经在规定的时间之前退出并随后以id 1740再次输入。但是没有数据可用,无法捕获特定信息。

答案 1 :(得分:0)

试试这个

@members = Member.where("date(timestamp) =? AND event_type=?", '2015-12-17 16:48:00', 'entry').count