一尘不染

如何使用ActiveRecord在MySQL上使用DISTINCT ON

mysql

希望所有不同用户的所有最新访问。

为此,我正在使用以下查询

Event.order(time: :desc).select('DISTINCT ON(user_id) user_id, time')

正在获取SQL语法错误。

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,值是上次访问时间

使用mysql作为数据库


阅读 283

收藏
2020-05-17

共1个答案

一尘不染

因此,您希望所有用户访问都具有上次访问时间。

取而代之的使用DISTINCT功能,您可以使用GROUPMAX功能。

查询看起来像

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}

希望这对您有用。

仅供参考(列)。是PostgreSQL语法。

2020-05-17