Ruby on rails 我应该使用哪个SQL联接来查看同一个表的集合中不存在的一个表的结果?

Ruby on rails 我应该使用哪个SQL联接来查看同一个表的集合中不存在的一个表的结果?,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我有一个巨大的表,其中每个月都会生成记录,结果用列的月份标记。我需要每月比较这些月的结果集,以找到本月出现的、上个月没有的新激活和新记录 目标是: 从上个月不存在唯一ID的当月获取一组结果 解释: 上个月3月,我有10条记录,标记为status=ACTIVE(状态=活动)和3月的_ 这个月是4月,我有11条记录标记为status=ACTIVE(状态=活动)和4月的月份 我已经试过了: 如果ta1=当月报告,ta2=上月报告 SELECT id FROM table ta1 LEFT OUTER

我有一个巨大的表,其中每个月都会生成记录,结果用列的月份标记。我需要每月比较这些月的结果集,以找到本月出现的、上个月没有的新激活和新记录

目标是: 从上个月不存在唯一ID的当月获取一组结果

解释:

上个月3月,我有10条记录,标记为status=ACTIVE(状态=活动)和3月的_

这个月是4月,我有11条记录标记为status=ACTIVE(状态=活动)和4月的月份

我已经试过了: 如果ta1=当月报告,ta2=上月报告

SELECT id FROM table ta1
LEFT OUTER JOIN table ta2
ON ta1.status = ta2.status
WHERE ta1.month_of = #{current_month}
AND ta2.month_of = #{last_month}
AND ta1.status = 'ACTIVE'
AND ta2.id IS null
我需要一个查询,该查询将返回1条4月份的新记录,而3月份的结果中不存在该记录

有人能告诉我要使用的正确连接以获得我想要的吗?此解决方案将应用于具有近十亿条记录的表。

选择id 来自ta1 其中月份=当前月份 和id不在从ta1选择id中,其中月份=最后一个月 和“活动”中的状态

或者你可以:

选择a.id fromselect id,MOUNT of from ta1,其中MOUNT of=当前月份,状态='Active' A. 左连接选择id,从ta1开始的月份,其中月份=最后一个月 a.id上的b!=b、 id

对我理解连接以及如何使用连接非常有帮助

我实际上使用了一个左外连接,如下所示:

SELECT se1.id FROM service_effectivenesses se1
        LEFT OUTER JOIN service_effectivenesses se2
        ON se1.vehicle_id = se2.vehicle_id
        AND se1.dealership_id = se2.dealership_id
        WHERE se1.dealership_id = #{dealershio_id}
        AND se2.id IS NULL
        AND se1.month_of = DATE('#{month_of.strftime("%Y-%m-%d")}')
        AND se2.month_of = DATE('#{month_of.strftime("%Y-%m-%d")}') - interval '1 month'
        AND se1.status = 'ACTIVE'

{}变量来自我们的Rails应用程序,所以忽略它们。

您能创建一个表数据、关系和所需输出的实际示例吗?您想要的很可能是两个内部联接,但我没有得到ON ta1.status=ta2.status部分。如果您的id是唯一的,为什么不在查询中使用as select ta1.id from ta1,其中ta1.id不在select id from ta2中;嘿@max;status列可以是ACTIVE(活动)或INACTIVE(不活动),其思想是我希望从本月报告和上月报告中找到所有类似的状态。我最后做了一个左接。我用我的解决方案更新了我原来的帖子。