正确的SQL或ActiveRecord公式

时间:2014-04-03 14:11:25

标签: sql ruby-on-rails activerecord

这是场景。我有一个名为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的记录,如下所示:

  • student_id数据
  • 在student_id投票的最近时段中记录的sentiment_id

等等,

  • 选择lecture_id == target_lecture_idtime_slot <= target_time_slot
  • 的记录子集
  • 从记录子集中选择每个学生由最近的(即最大的)time_slot代表的记录。

这应该会产生每student_id的单个记录。

到目前为止,我还没有成功。

1 个答案:

答案 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