Выберите Distinct в ошибке Postgresql для несвязанного столбца

Я изо всех сил пытаюсь написать оператор SQL, который делает следующее: Захватите самые последние завершенные оценки группы пользователей.

  • По одному на пользователя (различные user_id)
  • Из выбранной группы пользователей (user_id в массиве)
  • Только завершенные оценки (type_name не равно null)
  • Со всеми полями (использую позже)

Ближайшая попытка:

SELECT DISTINCT(user_id), assessments.*
FROM assessments
WHERE
  user_id IN (1,2,3,4,5,10)
  AND type_name IS NOT NULL
ORDER BY
  created_at DESC,
  user_id DESC

Текущая ошибка:

не удалось определить оператор равенства для типа json

On:

assessments.*

Я просмотрел много разных версий этого с различными ошибками, но я думаю, что эта должна работать, но, похоже, она пытается различаться на основе всех столбцов, а не только user_id.

Мне бы очень хотелось, чтобы это работало в Rails, но, поскольку я не мог этого добиться, я подумал сначала заставить работать простой SQL.

ОБНОВЛЕНИЕ

Часть проблемы может заключаться в том, что у меня есть столбцы JSON для оценки. Но поскольку я использую отдельные только для user_id, он должен игнорировать эти столбцы JSON.


person Tom Prats    schedule 19.08.2015    source источник


Ответы (1)


Попробуй это:

Assesment.uniq(:user_id)
          .where(iuser_id: [1, 2, 3])
          .where
          .not(type_name: nil)

Обновлять:

Поскольку проблема действительно в других столбцах, я бы рекомендовал преобразовать все ваши столбцы json в jsonb (магия стр. 9.4)

  class AlterJsonbToJsonAndBack < ActiveRecord::Migration                      
    def up                                                                     
      change_column :assessments, :column_name, 'jsonb USING CAST(column_name AS jsonb)'  
    end                                                                        

    def down                                                                   
      change_column :assessments, :column_name, 'json USING CAST(column_name AS json)'    
    end                                                                        
  end                                                                          

как использовать jsonb в рельсах

person Filip Bartuzi    schedule 19.08.2015
comment
Я получаю ту же ошибку, что и раньше, я обновлю вопрос, чтобы предоставить более актуальные данные. - person Tom Prats; 20.08.2015
comment
Rails, кажется, игнорирует аргумент в uniq. Я также пробовал distinct, но запрос, который он переводит, таков: SELECT DISTINCT "assessments".* FROM "assessments" WHERE "assessments"."user_id" IN (1, 2, 3) AND ("assessments"."type_name" IS NOT NULL) ORDER BY "assessments"."created_at" DESC - person Tom Prats; 20.08.2015