0

プロジェクトの SQL クエリに苦労しています。

次の表を示します。

tblProduct => (proProductID, proProductName)
tblSeller => (selSellerID, selSellerName)
linkProductSeller => (linkID, linkProductID, linkSellerID, linkPrice, linkShippingPrice, linkDatetime)

販売者で製品の価格/配送料が変更されるたびに、linkProductSeller に新しい行が追加されます。

商品の現在の最低価格/配送料の組み合わせと販売者を知りたいです。

製品の現在の価格をすべて取得するには、このクエリを使用します

SELECT linkProductID, linkSellerID, linkPrice+linkShippingPrice as price, linkDatetime
FROM linkProductSeller AS a
WHERE linkDatetime = (
    SELECT MAX(linkDatetime)
    FROM linkProductSeller AS b
    WHERE a.linkProductID = b.linkProductID
AND a.linkSellerID = b.linkSellerID)
ORDER BY linkProductID ASC, price ASC, linkDatetime DESC

ご支援ありがとうございます。

4

2 に答える 2

1

必要なデータはすべて linkProductSeller にあるため、これは機能するはずです

select l.linkProductId, min(linkPrice + linkShippingPrice) as minPrice
  from linkProductSeller l,
       (select linkProductID, linkSellerId, max(linkDateTime) as linkDateTime
          from linkProductSeller 
         group by linkProductID, linkSellerId) m
 where l.linkProductID = m.linkProductID
   and l.linkSellerID = m.linkSellerID
   and l.linkDateTime = m.linkDateTime
 group by linkProductId
于 2013-08-12T07:18:15.740 に答える
0

上記の答えは完全に正しいとは言えません。製品と販売者の名前が必要で、価格が正確にいつ変更されたかは問題ではない場合 (現在の価格のみが必要です)、次のようなものが必要になると思います。

select 
    p.proProductID, 
    p.proProductName, 
    s.selSellerID, 
    s.selSellerName, 
    min(l.linkPrice + l.linkShippingPrice) as Price
  from 
    tblProduct p,
    tblSeller s,
    (select * from linkProductSeller 
    where (linkProductID, linkSellerID, linkDateTime) 
    in 
        (select linkProductID, linkSellerID, max(linkDateTime) from linkProductSeller 
        group by linkProductID, linkSellerID 
        having linkDateTime = max(linkDateTime)) l
where 
    p.proProductID= l.linkProductID
    and s.selSellerID= m.linkSellerID
group by 
    p.proProductID, 
    p.proProductName, 
    s.selSellerID, 
    s.selSellerName
于 2013-08-12T07:51:47.867 に答える