有人可以帮我解决有关此问题的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
答案 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