本文介绍了如何使用 ActiveRecord 在 mysql 中使用 DISTINCT ON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!
问题描述
想要所有不同用户的所有最新访问.
Want all the latest visit of all the distinct user.
为此,我使用以下查询
Event.order(time: :desc).select('DISTINCT ON(user_id) user_id, time')
出现 SQL 语法错误.
Getting SQL syntax error.
ActiveRecord::StatementInvalid (Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON(user_id) user_id, time FROM `events` ORDER BY `events`.`time` DESC ' at line 1: SELECT DISTINCT ON(user_id) user_id, time FROM `events` ORDER BY `events`.`time` DESC LIMIT 11)
事件表列名
["id", "visit_id", "user_id", "name", "properties", "time"]
谁能帮我解决这个问题
预期的输出是这样的
{ 21 => "2018-12-18 09:44:59", 42 => "2018-12-19 12:08:59"}
21 是 user_id,value 是上次访问时间
21 is user_id and value is last visit time
使用mysql作为数据库
推荐答案
所以你希望所有用户访问的最后一次访问时间.
So you want all user visits with last visited time.
您可以使用 GROUP 和 MAX 函数代替 DISTINCT 函数.
Instead of use DISTINCT function, you can use GROUP with MAX function.
查询看起来像
Events.group(:user_id).maximum(:time)
这会输出您想要的结果
{21=>Tue, 18 Dec 2018 11:15:24 UTC +00:00, 23=>Thu, 20 Dec 2018 06:42:10 UTC +00:00}
希望这对你有用.
仅供参考DISTINCT ON(列).是 PostgreSQL 语法.
FYI DISTINCT ON(columns). is PostgreSQL Syntax.
这篇关于如何使用 ActiveRecord 在 mysql 中使用 DISTINCT ON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!
The End


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)