我使用哪个SQL Join来查看来自同一个表中不存在的一个表的结果?

问题描述 投票:1回答:2

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

目标:从CURRENT MONTH获取一组结果,其中唯一ID中的上一个月不存在。

解释:

上个月(3月),我有10条记录标记状态=“活动”,月份为“MARCH”

这个月(4月),我有11条记录标记状态=“活动”,月份为“APRIL”

我已经尝试过这样的事情:如果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

我需要的查询将返回带有month_of“APRIL”的1条新记录,该记录在month_of“MARCH”结果中不存在。

任何人都可以指出我正确的加入使用,以获得我正在寻找的东西?该解决方案将适用于具有近10亿条记录的表格。

ruby-on-rails postgresql
2个回答
1
投票

选择ID 来自ta1 其中month_of =(current_month) 和id不在(从ta1中选择id,其中month_of =(last_month)) 和''活跃'中的状态

或者你可以这样做:

选择a.id. from(select id,month_of from ta1 where month_of =(current_month)and status ='Active' )一个 left join(从ta1中选择id,month_of,其中month_of =(last_month) )b on a.id!= b.id.


0
投票

THIS ARTICLE对我理解连接以及如何使用它们非常有帮助。

我实际上最终使用LEFT OUTER JOIN如下:

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应用程序,因此请忽略它们。

© www.soinside.com 2019 - 2024. All rights reserved.