存在于一年中但不存在于另一个中的日期的 SQL 语法
Posted
技术标签:
【中文标题】存在于一年中但不存在于另一个中的日期的 SQL 语法【英文标题】:SQL Syntax for Date that exist in on year but not in Another 【发布时间】:2015-01-12 15:35:50 【问题描述】:我正在尝试编写一个查询,该查询将为我提供订单日期存在于 2013 年但不存在于 2014 年的所有成员的记录。当我编写查询时,它会为我提供仍然存在于 2013 年的所有记录2014 年。我正在尝试仅获取订单日期在 2013 年而不是 2014 年的记录。所以它应该显示 2013 年存在的记录并排除 2014 年不存在的记录。请帮忙,因为我真的是 SQL 新手.
非常感谢。
以下是我的查询:
选择 OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, CMI.NATIONAL_LEVEL2, 分钟(OMFMC.ORDER_DATE), OMFMC.ORDER_DATE, FT.PAYMENT_AMOUNT,
SUM(FT.PAYMENT_AMOUNT)as SUM
来自 客户 CUSTOMER_IN_TRIBUTE_TO
RIGHT OUTER JOIN ORDER_FND_DETAIL OFD
ON (CUSTOMER_IN_TRIBUTE_TO.MASTER_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_MAST_CUST
and CUSTOMER_IN_TRIBUTE_TO.SUB_CUSTOMER_ID=OFD.IN_TRIBUTE_TO_SUB_CUST)
RIGHT OUTER JOIN ORDER_MBR_FND_MTG_CUS_INFO_VW OMFMC
ON (OMFMC.ORDER_NO=OFD.ORDER_NO
and OMFMC.ORDER_LINE_NO = OFD.ORDER_LINE_NO )
LEFT OUTER JOIN CUS_CURRENT_MEMBERSHIP_INFO CMI
ON (CMI.MASTER_CUSTOMER_ID=OMFMC.BILL_MASTER_CUSTOMER_ID
and CMI.SUB_CUSTOMER_ID=OMFMC.BILL_SUB_CUSTOMER_ID)
LEFT OUTER JOIN FAR_TXN FT
ON (FT.ORDER_NO=OMFMC.ORDER_NO
and FT.ORDER_LINE_NO=OMFMC.ORDER_LINE_NO)
在哪里
OMFMC.ORDER_STATUS_CODE='A'
AND OMFMC.LINE_STATUS_CODE = 'A'
AND OMFMC.ORDER_STATUS_CODE = 'A'
AND OMFMC.LINE_STATUS_CODE = 'A'
AND OMFMC.ORDER_DATE BETWEEN '1/1/2013' and '12/31/2013'
AND OMFMC.ORDER_DATE Not BETWEEN '1/1/2014' and '12/31/2014'
AND OMFMC.BILL_CUSTOMER_CLASS_CODE NOT IN ( 'TEST_MBR','STAFF' )
AND FUND in ('FOSFN' , 'MFUND')
分组依据 OMFMC.BILL_MASTER_CUSTOMER_ID, OMFMC.BILL_FIRST_NAME, OMFMC.BILL_LAST_NAME, OMFMC.BILL_LABEL_NAME, OMFMC.BILL_PRIMARY_EMAIL_ADDRESS, OMFMC.BILL_ADDRESS_1, OMFMC.BILL_ADDRESS_2, OMFMC.BILL_CITY, OMFMC.BILL_STATE, OMFMC.BILL_POSTAL_CODE, CMI.NATIONAL_LEVEL2, OMFMC.ORDER_DATE, FT.PAYMENT_AMOUNT
HAVING SUM(FT.PAYMENT_AMOUNT) < 0
Order By BILL_MASTER_CUSTOMER_ID
在订单日期字段中,有日期为 2013 年和 2014 年的日期。我希望我的查询查看 2013 年和 2014 年的订单日期,并且只提取 2013 年的订单日期。而不是具有 2013 年和 2014 年日期的记录。如果他们在 2013 年和 2014 年有订单,那么我想排除这些记录。比如:
enter code here
Bill_Member_ID.............Order_Date 123.......................2013 年 1 月 5 日 123....... 2013 年 1 月 27 日 123....... 2014 年 2 月 15 日 123....... 2014 年 2 月 18 日 456....................... 2013 年 1 月 7 日 789....... 2013 年 1 月 5 日 789....... 2014 年 2 月 17 日 992........ 2013 年 3 月 15 日
那么我应该得到一个回报
Bill_Member_ID.............Order_Date
456....................... 2013 年 1 月 7 日 992........ 2013 年 3 月 15 日
非常感谢
【问题讨论】:
【参考方案1】:您需要的是一个简单的子选择,并将其结果输入到最外层的选择中以显示结果。
您要查找的是Bill_Member_ID
的列表,他们的订单日期在 2013-01-01 和 2013-12-31(含)之间,但没有在 2014-01-01 和 2014 之间的订单日期-12-13。所以,让我们构建我们的伪代码选择。我们由内而外地执行此操作(从最内层开始,一直到选择的最外层)。
首先,生成 2014 年有订单的会员列表。那就是
Select Bill_Member_ID
From Order_Table
WHERE Year( OrderDate ) = '2014';
我们将其作为条件提供给下一个选择。下一层的工作是选择 OrderDate 为 2013 年而非 2014 年的所有成员。
Select Bill_Member_ID
From Order_Table
WHERE Year( OrderDate ) = '2013' AND Bill_Member_ID Not In
(
Select Bill_Member_ID
From Order_Table
WHERE Year( OrderDate ) = '2014'
)
这会生成您的 Bill_Member_ID
列表,他们在 2013 年有订单,但在 2014 年没有订单。添加您最终选择所需的其他列。此外,根据需要添加您的其他过滤条件(即非测试和非员工)以缩小结果范围。
这就是您真正需要做的所有事情来生成您的目标客户列表。如果您使用的数据库不支持仅指定年份,则需要使用日期之间来过滤条件范围内的 where 日期字段。
【讨论】:
非常感谢 StarPilot!这做到了。 :) 不客气。很高兴这对你有用。在 SO,我们希望将解决问题的答案作为实际答案接受。以上是关于存在于一年中但不存在于另一个中的日期的 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章
根据存在于另一个模型数组中的日期对模型数组进行排序。斯威夫特 3
如果 id 不存在于另一个表中,则根据条件使用 sql 计算 id 的编号