Ruby on rails 我应该使用哪个SQL联接来查看同一个表的集合中不存在的一个表的结果?
我有一个巨大的表,其中每个月都会生成记录,结果用列的月份标记。我需要每月比较这些月的结果集,以找到本月出现的、上个月没有的新激活和新记录 目标是: 从上个月不存在唯一ID的当月获取一组结果 解释: 上个月3月,我有10条记录,标记为status=ACTIVE(状态=活动)和3月的_ 这个月是4月,我有11条记录标记为status=ACTIVE(状态=活动)和4月的月份 我已经试过了: 如果ta1=当月报告,ta2=上月报告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
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(不活动),其思想是我希望从本月报告和上月报告中找到所有类似的状态。我最后做了一个左接。我用我的解决方案更新了我原来的帖子。