Прошу простить мою наивность, я новичок Oracle SQL, использующий Toad. У меня есть таблица с записями продаж, назовите ее Sales. Он имеет записи о клиентах (по CustID
) о дате продажи (SaleDate
), и товар продан (по ItemID
). Это Mview фактически других таблиц с окончательным статусом продаж в нем.Oracle SQL Newbie нужна помощь в поиске похожих записей
Я пытаюсь построить запрос для возврата CustID
, SaleDate
и ItemID
если есть продажа в тот же день для этого клиента для обоих ItemID
= A и ItemID
= B, если между SaleDate
7/1/2013 и 7/31/2013 года. Если это условие существует, я хочу, чтобы обе записи были возвращены с CustID
, SaleDate
и ItemID
. Я предполагаю, что две записи будут на отдельных строках.
Я изучал IN, EXISTS и подзапросы, но еще не наступил на правильный подход. В таблице содержится около 7 миллионов записей, поэтому мне нужно что-то достаточно эффективное. Может ли кто-нибудь указать мне в правильном направлении, чтобы достичь этого? Я учусь, но мне нужно учиться быстрее :)
ПОЛУЧАЙТЕ!
24/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