2013-06-16 4 views
1

Я пытаюсь вернуть 1 запись на одного клиента вместе с первой записью из другой таблицы (продукта). Таблицы объединены с таблицей пересечений, а дата, когда я использую min (date) on, является датой ввода пользователем.sql min дата, возвращающая более 1 записи

Мой sql будет работать отлично, за исключением того, что я заметил там несколько клиентов, которые имеют более одной записи в таблице продуктов с той же датой, поэтому они возвращаются более одного раза. Я хочу просто вернуть один продукт на одного клиента. База данных - это оракул, поэтому я попытался использовать rownum, но затем возвратил только 1 запись для всего запроса, поэтому я, очевидно, не использую его правильно. Это мой SQL

SELECT cust.ROW_ID prod.NAME, prod.DATE 
FROM cust INNER JOIN ProdCust on cust.ROW_ID = ProdCust.CUST_ID 
      INNER JOIN prod on ProdCust .PROD_ID = Prod.ROW_ID 
      INNER JOIN 
        (SELECT ProdCust.CUST_ID, MIN (Prod.DATE) minDate 
        FROM ProdCust, Prod 
        WHERE ProdCust.PROD_ID = Prod.ROW_ID 
        GROUP BY CUST_ID 
        ) ProdCustMin on ProdCust.CUST_ID = ProdCustMin.CUST_ID AND prod.DATE = ProdCustMin.minDate 

ответ

3

В Oracle, вы можете использовать row_number() разрешить связи:

SELECT c.ROW_ID 
,  p.NAME 
,  p.DATE 
FROM Cust c 
JOIN (
     SELECT row_number() over (partition by pc.CUST_ID order by p.DATE) rn 
     ,  pc.CUST_ID 
     ,  p.NAME 
     ,  p.DATE 
     FROM Prod p 
     JOIN ProdCust pc 
     ON  pc.PROD_ID = p.ROW_ID 
     ) p 
ON  c.ROW_ID = p.CUST_ID 
     AND p.rn = 1 -- First row only 
+0

отлично! благодаря –

Смежные вопросы