我试图为每位客户返回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
答案 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