1

別のテーブル (製品) からの最初のレコードと共に、顧客ごとに 1 つのレコードを返そうとしています。テーブルは交差テーブルと結合されており、最小 (日付) を使用している日付はユーザー入力の日付です。

私のSQLは正常に機能しますが、製品テーブルに同じ日付のレコードが複数あることに気付いた顧客が何人かいることに気付いたため、複数回返されています。顧客ごとに 1 つの製品のみを返品できるようにしたいです。データベースはオラクルなので、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 
4

1 に答える 1

2

row_number()Oracle では、同点を解決するために使用できます。

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 
于 2013-06-16T07:26:46.507 に答える