请原谅我的天真,我是使用Toad的Oracle SQL新手。我有一张销售记录表,称之为销售。它有客户记录(通过CustID
)销售日期(SaleDate
)和销售的项目(通过ItemID
)。这是其他表格中的最终销售状态的Mview。Oracle SQL新手需要帮助查找类似记录
我试图构造查询返回CustID
,SaleDate
和ItemID
如果该客户两个ItemID
= A和ItemID
= B在同一天降价销售,如果SaleDate
2013年7月1日和7之间/ 31/2013如果存在这种情况,我希望以CustID
,SaleDate
和ItemID
返回这两个记录。我假设这两个记录将在不同的行上。
我一直在研究IN,EXISTS和子查询,但尚未采取正确的方法。该表有大约700万条记录,所以我需要一些相当有效的东西。有人能指出我在正确的方向来实现这一目标吗?我正在学习,但我需要更快地学习:)
吃掉了!
2/24/2014:嘿,我得到它的工作,它返回的结果在同一行。对此的一个警告。在我的原始示例中,我在查找5P311和6R641都存在的日期。实际上,我希望5P311和RES组中的任何值都存在,其中6R641是其中的一员。下面的代码实现的结果,因为我需要他们:
SELECT ItemA.CLM_SSN,
ItemA.CLM_SERV_STRT Service_Date,
ItemA.CLM_COST_CTR_NBR,
ItemA.CLM_RECV_AMT,
ItemB.CLM_COST_CTR_NBR RES_Cost_Center,
ItemB.CLM_RECV_AMT,
GroupCode,
Service
FROM DDIS.PTS_MV_CLM_STAT ItemA,
DDIS.PTS_MV_CLM_STAT ItemB,
DDIS.CST_SERV
WHERE TRUNC(ItemA.CLM_SERV_STRT) between to_date ('01-07-2013','dd-mm-yyyy') and to_date('31- 07-2013','dd-mm-yyyy')
and TRUNC(ItemA.CLM_SERV_STRT) = TRUNC(ItemB.CLM_SERV_STRT)
and TRIM(ItemA.CLM_COST_CTR_NBR) = '5P311'
and ITEMB.FK_SERV = CST_SERV.PKSERVICE
and CST_SERV.GroupCode = 'RES'
and Itema.CLM_SSN = ItemB.CLM_SSN
and ItemA.CLM_RECV_AMT <> 0
and ItemB.CLM_RECV_AMT <> 0
ORDER BY ItemA.CLM_SSN, ItemA.CLM_SERV_STRT
@ user2989408查看我上面张贴的代码。它返回时间范围内的所有记录,而不是那些WHERE语句中的两个值。我仍然试图弄清楚这一点。任何帮助,将不胜感激。谢谢 – user3334579