2

オファー情報を含むテーブルと、次のような製品を含むテーブルが 2 つあります。

           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) のみをカウントする必要があります。

これをどのように照会するのが最善ですか?

4

4 に答える 4

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));
于 2013-08-23T12:47:30.593 に答える
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
于 2013-08-23T12:44:39.367 に答える
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

offernumber と id 以外の offer からの追加の列が必要な場合:

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 
于 2013-08-23T13:00:56.353 に答える
0

相関するid場合:version

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
于 2013-08-23T12:54:10.037 に答える