这是场景。我有一个名为sentiment_log的数据库,用于记录实时'投票'来自学生,参加某个讲座,他们在特定的时间投票表明他们正在参与#34;或"困惑"。讲座分为由整数表示的时隙。架构如下所示:
student_id: int
sentiment_id: int
lecture_id: int
time_slot: int
rails模型是SentimentLog我相信我想要的只需要一点聪明的SQL,但我没有成功制定它。我想要的是,给定一个target_time_slot和一个target_lecture_id,结果集包含每个student_id的记录,如下所示:
等等,
lecture_id == target_lecture_id
和time_slot <= target_time_slot
time_slot
代表的记录。这应该会产生每student_id
的单个记录。
到目前为止,我还没有成功。
答案 0 :(得分:0)
你没有告诉我们你的型号名称,所以我称之为“Foo”。我还假设一切都在同一张桌子里。你没有描述student_id,它是否与user_id相同?
@foos=Foo.where("lecture_id = ? AND time_slot <= ?",target_lecture_id, target_time_slot).maximum(:time_slot, group: :student_id)
此语句将提供如下的哈希:
{4=>240, 5=>235, 2=>237, 1=>243, 3=>241} #{:student_id => max(:time_slot)}
结果用法示例:
@foos.each do |foo|
puts foo[0] #... (student_id)
puts foo[1] #... (max time_slot)
end