sql min date返回超过1条记录

时间:2013-06-16 07:09:42

标签: sql oracle

我试图为每位客户返回1条记录,以及另一张表(产品)的第一条记录。这些表与交集表连接,我使用min(date)的日期是用户输入日期。

我的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 

1 个答案:

答案 0 :(得分: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