0

我被这个查询困住了,我无法解决它。我在加入表格时需要帮助。

我有 4 个表(客户、产品、状态和报价)。

我想根据客户 ID 从这些表中读取数据。

在前 3 个表中,针对客户 ID 的记录数为 1,但报价表可能有多个客户行。

我想从每个客户的报价表中读取最新行。我无法查询这种情况。

例如

Customer have columns (cID, Name, Surname)
STATUS (sID, cID, Status, Sdate)
ADDRESS (adID, cID, Addetail)
Offer (ID, cID, offer, offDate)

这是我的查询,它不起作用:

SELECT c.ID, 
c.NAME, 
c.SURNAME, 
st.ID, 
st.Status, 
st.Sdate
ad.Addetial,
off.OffDATE
FROM customer c, address ad, status st, offer of

WHERE 
c.ID=ad.cID 
AND c.ID=st.cID 
AND c.ID = off.cID
.. 

我很困惑如何将选择限制为报价表中的一行。因为如果我输入 c.ID = off.cID 那么它将返回所有我不想要的报价。

PS:我知道有类似的问题,但我无法根据我的情况进行映射。使用 Max,只返回一行(即使有很多客户)。

4

2 回答 2

0

试试这个

SELECT c.ID, 
c.NAME, 
c.SURNAME, 
st.ID, 
st.Status, 
st.Sdate
ad.Addetial,
off.OffDATE
FROM customer c   
WHERE 
INNER JOIN  address ad ON c.ID=ad.cID 
INNER JOIN  status st  ON AND c.ID=st.cID 
INNER JOIN (SELECT *,MAX(id) AS `max` FROM offer GROUP BY  id ,cID) off
ON c.ID = off.cID

我使用子查询(SELECT *,MAX(id) AS max FROM offer GROUP BY id ,cID)来获取最新的客户报价子查询将只执行一次以获取所需的最新数据集

于 2013-10-28T19:26:44.760 回答
0

您需要groupwise maximum,可以通过将offer表连接到其自身的分组版本来获得:

SELECT c.ID,
       c.NAME, 
       c.SURNAME, 
       st.ID, 
       st.Status, 
       st.Sdate
       ad.Addetial,
       off.OffDATE
FROM   customer c
  JOIN address  ad ON ad.cID = c.ID
  JOIN status   st ON st.cID = c.ID
  JOIN (offer  off NATURAL JOIN (
         SELECT   cID, MAX(OffDATE) OffDATE
         FROM     offer
         GROUP BY cID
       ) t) ON off.cID = c.ID
于 2013-10-28T19:28:32.077 回答