当前位置: 首页 > 面试题库 >

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

康赞
2023-03-14
问题内容

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

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

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作为数据库


问题答案:

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

取而代之的使用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语法。



 类似资料:
  • 问题内容: 我刚遇到一个非常复杂的查询,要花8秒钟才能运行。EXPLAIN显示了一个奇怪的表顺序,即使使用FORCE INDEX提示也没有全部使用我的索引。我遇到了STRAIGHT_JOIN连接关键字,并开始用它替换一些INNER JOIN关键字。我注意到速度有了很大提高。最终,我为此查询将所有INNER JOIN关键字替换为STRAIGHT_JOIN,它现在可以在0.01秒内运行。 我的问题是何

  • 我有一个简单的国家/地区表,其中包含名称,大陆,人口和其他一些字段。 我正在尝试使用ActiveRecord执行以下MySQL查询 选择来自大陆=“亚洲”的国家/地区的计数(*),总和(人口),AVG(人口) 我该怎么做? 我试过: 国其中(:大陆= 国其中(:大陆= 国其中(:大陆= 它们都单独工作得很好,它们都返回数字(不是一个ActiveRelation对象),这意味着您不能做类似 国其中(

  • ActiveRecordPlugin可以独立于java web 环境运行在任何普通的java程序中,使用方式极度简单,相对于web项目只需要手动调用一下其start() 方法即可立即使用。以下是代码示例: public class ActiveRecordTest { public static void main(String[] args) { DruidPlugin dp = n

  • 问题内容: 我有一个组件数据库。每个组件都是特定的类型。这意味着组件和类型之间存在多对一的关系。删除类型时,我想删除所有具有该类型外键的组件。但是,如果我没记错的话,级联删除将在删除组件时删除类型。有什么办法可以做我所描述的吗? 问题答案: 这就是您要包含在组件表中的内容。 请记住,您需要使用InnoDB存储引擎:默认的MyISAM存储引擎不支持外键。

  • 本文向大家介绍如何在BigDecimal上使用>,=,相关面试题,主要包含被问及如何在BigDecimal上使用>,=,时的应答技巧和注意事项,需要的朋友参考一下 Class的每个对象都有一个可用来将其与另一个BigDecimal进行比较的方法。然后比较的结果,或者根据需要进行比较。阅读文档,您将找到答案。 运营商,,等只能在基本数据类型等中使用,,或它们的包装类等和。 从以下文档中: 将其与指定

  • 问题内容: 由于性能问题, 我尝试避免执行Count( )。 (即 从用户中 选择COUNT( )) 如果我在phpMyAdmin中运行以下命令,则可以: 它将返回行数。即用户数量。 但是,如果我在PHP中运行,则无法执行以下操作: 似乎PHP不希望传入两个查询。那么,我该怎么做呢? 问题答案: 仅在使用子句的情况下才有用,但仍想知道不使用会发现多少行。 考虑一下它是如何工作的: 您正在强制数据库