2013-08-23 30 views
2

我有兩個表一個方含優惠信息和其他方含產品 是這樣的:只選擇最新版本的SQL數據的加入

  OFFER         PRODUCTS 
ID  Number  Version   poID  offer_id  Product  how_many 
==========================   ======================================== 
1   123  1    1   1    Apple  1 
2   123  2    2   1    Banana  2 
3   124  1    3   1    Orange  1 
             4   2    Apple  1 
             5   2    Banana  2 
             6   2    Orange  2 
             7   2    Kiwi   1 
             8   3    Apple  2 
             9   3    Banana  3 

我想那是多少產品列表目前提供。 由於OFFER(id = 2)是隻有(id = 1)的更新(id = 2)應該被計數。

我應該如何最好地查詢這個?

+1

你可以發佈想要的結果..問題很混亂.. – StevieG

回答

0
SELECT * 
FROM products 
WHERE offer_id = (SELECT MAX(id) FROM offer) 

,或者,如果你喜歡的聯接語法

SELECT p.* 
FROM products p 
INNER JOIN (SELECT MAX(id) id FROM offer) o ON p.offer_id = o.id 

編輯(還沒有完全確定這是你想要的,沒有看到您想要的結果)

SELECT p.* 
FROM products p 
INNER JOIN offer o on p.offer_id = o.id 
INNER JOIN 
(SELECT number, max(version) 
FROM offer 
GROUP BY number 
) oMax ON o.number = oMax.number AND o.version = oMax.version 
+0

這不會返回所需的結果。 –

+0

你的子查詢不會產生正確的結果,他正在尋找'MAX(版本)' – NDM

+0

'id'可能是我讀錯了問題,但據我瞭解,OP希望所有產品的offer_id = 3 。我想這可能會被解釋爲他想要蘋果和香蕉提供3,而提供2的獼猴桃和橙子,在這種情況下你是對的,它不會返回。 – StevieG

1

首先,你需要獲取所有最新優惠:

select o.id 
from offer o 
where version = (select max(version) 
       from offer o2 
       where o2.number = o.number); 

基於以上你就可以得到所有的產品:

select p.* 
from products p 
where offer_id in (select o.id 
        from offer o 
        where version = (select max(version) 
            from offer o2 
            where o2.number = o.number)); 
0

如果idversion歸屬關係:

select sum(how_many) from products p 
join offer on p.offer_id=offer.id 
join (
    select number, max(version) version from offer group by number 
) x 
on offer.id=x.id and offer.version = x.version 
+0

這隻會在具有較高vesion數的報價保證具有較高的id時纔有效。 –

+0

通常給出這種約束。但我更新了答案 – Chris

0

試試這個:

select [list columns here] 
from products p 
join (select offernumber, max(id) as ID from offer group by offernumber) a 
    on a.id = p.offer_id 

如果需要從addtional列除offernumber和id之外的報價:

select [list columns here] 
from products p 
join (select offernumber, max(id) as ID from offer group by offernumber) a 
    on a.id = p.offer_id 
join offer o on o.id = a.id