1

我正在尝试为每个客户返回 1 条记录,以及来自另一个表(产品)的第一条记录。这些表与一个交集表连接在一起,我使用最小(日期)的日期是用户输入的日期。

我的 sql 可以正常工作,除了我注意到有一些客户在产品表中具有多个相同日期的记录,因此它们被多次返回。我希望每个客户只能退回 1 件产品。数据库是 oracle,所以我尝试使用 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

在 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 
于 2013-06-16T07:26:46.507 回答