그룹화 내가 속한 모델 바퀴가로 : 자동차레일 - 액티브 쿼리 : 열 ASC 정렬 한 다음 열
그래서 각 차량은 많은 바퀴를 가지고,하지만 난 쿼리를 할 필요가 어디에서 톱 10의 가장 빠른 랩에 당긴다. 그러나 단지 각 차당 가장 빠른 무릎을 당긴다. 다시 말해, 한 대의 자동차가 목록에서 상위 10 위의 가장 빠른 랩 중 5 번을 차지하는 것을 허용하지 않기를 바란다.
각 랩에는 : car_id 필드가 있습니다. 이 열을 그룹화 한 다음 그룹에서 min (Lap.time) 행으로 무릎을 당깁니다. (일컬어 가장 빠른 무릎 시간 : car_id).
그래서 Postgres를 사용하면 가장 좋은 방법은 무엇입니까? 먼저 모든 랩을 주문한 다음 그룹으로 묶은 다음 그룹에서 첫 번째 랩을 가져올 수 있습니까? 또는 정렬하여 정렬 순서를 유지하지 않습니까? 여기
는 랩 모델에 대한 내 스키마입니다 :
create_table "laps", force: true do |t|
t.decimal "time"
t.string "video_url"
t.integer "car_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
t.boolean "approved"
end
나는이 두 가지 조합 된 쿼리를 사용해야합니까? 내가 그 car_id 당 분 (lap.time)를 얻을 수 있도록 바퀴를 주문해야,
select('DISTINCT ON (car_id) *')
하지만 :
나는이 작업을 수행하여 독특한 자동차 아이디의 무릎을 얻을 수 있습니다. 그래서 다음과 같은 명령을 내리면 :
select('DISTINCT ON (car_id) *').order('car_id, time ASC').sort_by! {|ts| ts.time}
이것은 효과가 있지만 이상하게 보입니다. 마자 나는 순서대로 car_id를 제거하는 것 같은 순서를 바꾸려고 노력할 때마다 postgres 오류가 발생합니다.
아마도 이것입니까? group ('laps.id, laps.car_id'). limit (10)' – MrYoshiji
방금 시도 했어요. 그것은 나에게 같은 car_id에서 여러 바퀴를 준다 –
이것은 내가했던 것과 그 독특한 car_id의 빠른 것을 얻는 것이다. 그러나 나는 그것을 디버깅 할 때 그것이 보이는 시간에 따라 정렬되지 않는다. 더 좋은 방법이 있다면 답을 게시 해주세요 : select ('DISTINCT ON (car_id) *') order ('car_id, time ASC') –