2013-08-12 2 views
0

프로젝트에 대한 SQL 쿼리로 어려움을 겪고 있습니다.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 

들으을 사용하여 제품의 현재 가격을 얻으려면. 당신이 필요로하는

+0

변경 : 다음, 나는 생각한다 (당신은 단지 현재의 사람이 필요합니다) 당신이 제품과 판매자의 이름을 필요로하고 가격이 변경 될 때 정확하게 문제가되지 않는 경우, 당신은 이런 식으로 뭔가를해야합니다 order by 절을 가격순으로 정렬하려면 검색된 첫 번째 행이 가장 낮은 가격이어야합니다. – bumperbox

+0

Thx하지만 ** 각 제품에 대해 최저 가격 만 필요합니다 **. – Dave

+0

내가 말할 수있는 것에서 subselect를 사용해야 할 것입니다. 이 질문을보고 도움이되는지 확인하십시오. http://stackoverflow.com/questions/5228577/get-the-minimum-price-of-each-product-type-with-currency-conversion?rq=1 – bumperbox

답변

1

모든 데이터가 그래서 이것은 위의 대답은 완전히 정확하지

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 
+0

위대한 작품 완벽. 고마워. – Dave

0

작동합니다 linkProductSeller에있는 것 같아요.

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 
+0

맞습니다. 두 개의 조인이 더 필요하지만 단순화하기 위해 나는 그것을 버렸다. –

관련 문제