Rails 4查询接口WHERE IN

时间:2016-05-23 13:34:43

标签: mysql ruby-on-rails

我似乎无法弄清楚如何使用Rails Active Record Query Interface编写以下简单的SQL。

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]

references :product_location, index: true, foreign_key: true
decimal :net_sale, precision: 16, scale: 6
date :sale_date

[产品展示您]

references :product, index: true, foreign_key: true
etc...

关系

ProductSale -> belongs_to :product_location
ProductLocation -> has_many: product_sales

请注意我的数据库是MySQL

2 个答案:

答案 0 :(得分:1)

我有另一种建议,请尝试

对于Postgresql

(1-$A2)*(2-$A2)*(3-$A2)*($A2+B$1)/6 - $A2*(1-$A2)*(3-$A2)*($A2+B$1)/2 + $A2*(1-$A2)*(2-$A2)*($A2-B$1)/6 + $A2*(2-$A2)*(3-$A2)*($A2-B$1)/2 - B$1*(1-B$1)*(3-B$1)*$A2*(3-$A2)*(6-4*$A2)/2 + B$1*(1-B$1)*(2-B$1)*$A2*($A2-3)*(6-4*$A2)/6

使用DISTINCT ON在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") 排序product_location_id上从高到低选​​择uniq行

对于MySQL

net_sale

答案 1 :(得分:0)

嗯,查询的第一部分如下,只需使用简单的一对多关系查询,然后为请求加入x <- insert(cls[[1]], ats=c(4), values="K2") 条件:

and