在不相关列上的Postgresql错误中选择Distinct

在不相关列上的Postgresql错误中选择Distinct,sql,ruby-on-rails,postgresql,ruby-on-rails-4,postgresql-9.4,Sql,Ruby On Rails,Postgresql,Ruby On Rails 4,Postgresql 9.4,我正在努力编写一个SQL语句来实现以下功能:获取一组用户最近完成的评估 每个用户一个(不同的用户id) 所选用户组的(user\u id在数组中) 仅完成评估(type\u name不为空) 包含所有字段(稍后将使用) 最近的尝试: 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 c

我正在努力编写一个SQL语句来实现以下功能:获取一组用户最近完成的评估

  • 每个用户一个(不同的
    用户id
  • 所选用户组的(
    user\u id
    在数组中)
  • 仅完成评估(
    type\u name
    不为空)
  • 包含所有字段(稍后将使用)
最近的尝试:

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类型的相等运算符

关于:

我已经浏览了很多不同版本的文章,得到了各种各样的错误,但是我认为这一个应该可以工作,但是它似乎试图根据所有的列来区分,而不仅仅是
user\u id

我真的希望它能在Rails中工作,但由于我不能做到这一点,我想先让普通SQL工作

更新

部分问题可能是我有关于评估的JSON列。但由于我只是在
user\u id
上使用distinct,它应该忽略那些JSON列

试试以下方法:

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

由于问题确实存在于其他列中,因此我建议将所有
json
列转换为
jsonb
(第9.4页)

类AlterJsonbToJsonAndBack

我得到了与之前相同的错误,我将更新问题以提供一些更相关的dataRails似乎忽略了
uniq
中的参数。我还尝试了
distinct
,但它转换成的查询是:
从“assessments”中选择distinct“assessments”。*其中的“assessments”(评估),(1,2,3)中的“user_id”和(“assessments”。“type_name”不为空)按“assessments”(评估)排序。“created_at”DESC
Assesment.uniq(:user_id)
          .where(iuser_id: [1, 2, 3])
          .where
          .not(type_name: nil)
  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