首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除保存最后标识ActiveRecord的重复记录

删除保存最后标识ActiveRecord的重复记录
EN

Stack Overflow用户
提问于 2019-01-25 16:12:40
回答 1查看 27关注 0票数 1

我一直试图删除复制的记录(列shopify_order_id中相同的值),保留最近的记录。

我用sql写的:

代码语言:javascript
复制
select orders.id from (
  select shopify_order_id, min(shopify_created_at) as min_created 
  from orders group by shopify_order_id having count(*) > 1 limit 5000
) as keep_orders 
join orders 
on 
  keep_orders.shopify_order_id = orders.shopify_order_id and 
  orders.shopify_created_at <> keep_orders.min_created

现在我试着把它记录下来,但似乎不能加入这两个部分。

第一个嵌套选择是

代码语言:javascript
复制
Order.select('shopify_order_id, MIN(shopify_created_at) as min_created').
        group(:shopify_order_id).
        having('count(*) > 1').
        limit(5000)

但是,下面的内容不起作用:

代码语言:javascript
复制
Order.select('orders.id').from(keep_orders, :keep_orders).
joins('orders ON keep_orders.shopify_order_id = orders.shopify_order_id').
where.not('orders.shopify_created_at = keep_orders.min_created')

它构建查询:

代码语言:javascript
复制
SELECT  orders.id FROM  (SELECT  shopify_order_id, MIN(shopify_created_at) as min_created FROM "orders" GROUP BY "orders"."shopify_order_id" HAVING (count(*) > 1) LIMIT $1) keep_orders  orders ON keep_orders.shopify_order_id = orders.shopify_order_id WHERE NOT (orders.shopify_created_at = keep_orders.min_created) ORDER BY "orders"."id" ASC LIMIT $2  [["LIMIT", 5000], ["LIMIT", 1]]

它缺少关键字join

对于如何以另一种方式重构查询/完成它的任何帮助,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-25 16:24:46

如果使用joins调用字符串SQL片段,则需要指定所需的联接类型:

代码语言:javascript
复制
Order.select('orders.id').from(keep_orders, :keep_orders)
  .joins('JOIN orders ON keep_orders.shopify_order_id = orders.shopify_order_id')
  .where.not('orders.shopify_created_at = keep_orders.min_created')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54369010

复制
相关文章

相似问题

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