首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4查询接口

Rails 4查询接口
EN

Stack Overflow用户
提问于 2016-05-23 13:34:42
回答 2查看 107关注 0票数 0

我似乎无法理解如何使用Rails活动记录查询接口编写以下简单的SQL。

代码语言:javascript
复制
SELECT * 
FROM product_sales 
WHERE (product_location_id, net_sale) 
IN 
( 
  SELECT product_location_id, MAX(net_sale)
  FROM product_sales
  GROUP BY product_location_id
) 
AND (sale_date BETWEEN '2016-05-01' AND '2016-05-31');

注意:我看过以下链接。但是,它只在外部WHERE子句中指定了一个列,而我需要两个列。

链接:subqueries in activerecord

谢谢你的帮助。

更新

模型

ProductSale

代码语言:javascript
复制
references :product_location, index: true, foreign_key: true
decimal :net_sale, precision: 16, scale: 6
date :sale_date

ProductLocation

代码语言:javascript
复制
references :product, index: true, foreign_key: true
etc...

关系

代码语言:javascript
复制
ProductSale -> belongs_to :product_location
ProductLocation -> has_many: product_sales

请注意,我的数据库在MySQL中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-23 13:54:50

我有另一个建议,试试

用于Postgresql

代码语言:javascript
复制
ProductSale
        .select("DISTINCT ON (product_sales.product_location_id), product_sales.*")
        .where("product_sales.sale_date BETWEEN '2016-05-01' AND '2016-05-31'")
        .order("product_sales.product_location_id, product_sales.net_sale DESC")

使用DISTINCT在product_location_id排序的net_sale上从高到低选择uniq行

对于MySQL

代码语言:javascript
复制
sub_query = ProductSale.select("product_location_id, MAX(net_sale) as max_net_sale").where("sale_date BETWEEN '2016-05-01' AND '2016-05-31'").group("product_location_id").to_sql
ProductSale
       .joins("INNER JOIN (#{sub_query}) t ON product_sales.product_location_id = t.product_location_id AND product_sales.net_sale = t.max_net_sale")
票数 1
EN

Stack Overflow用户

发布于 2016-05-23 14:34:38

查询的第一部分如下,只需使用简单的一对多关系查询,然后加入and条件进行请求:

代码语言:javascript
复制
ProductSale
   .where(net_sale: ProductSale.pluck("MAX(net_sale)"))
   .and("sale_date BETWEEN ? AND ?", date1, date2)
   .where.not(product_location_id: nil)
   .group(:product_location_id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37392480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档