2013-03-06 2 views
1

먼저 EAV 데이터베이스와 작업 중이므로 엔티티라고 말하면 테이블과 동일합니다.중첩 된 순서로 맨 위 결과로 정렬

"자산"엔티티가 있으며 각 자산에는 많은 "오퍼"가 있습니다. 각 오퍼에는 가격 속성이 있습니다. 각 자산에 대해 최고가로 제안을 반환하려고합니다. 또한 최고 가격으로 주문해야합니다. 그래서 예를 들어

자산 1 (a), $ 7.25 (b)와 $ 5 (c)

자산 2 2 개 쿠폰이 $ 5 가격 3 개 쿠폰 (A, B 및 C)를 갖는다 (D와 E) 가격 $ 9 (D)와 $ 3 (E)

그래서 결과 집합이 같아야합니다 : 나는 일하고 있기 때문에

Offer  Price  Asset 
d   $9   2 
b   $7.25  1 

어떤 SQL을 제공하지 않은 나는 이유는 모든 관계가있는 비 관계형 데이터베이스 엔티티 테이블, 하위 유형 테이블, 메타 스트림 및 메타 데이터의 4 개 테이블에서 개최됩니다. 그러나 개념적 답변을 마치 관계형 데이터베이스처럼 생각하고 EAV SQL로 변환 할 수 있습니다.

+0

EAV는 RDBMS (예 : MySQL)에 구현 되었습니까? 그렇다면 어떤 RDBMS 또는 다른 종류의 데이터베이스 관리 시스템에 구현됩니까? (내가 물어 보는 이유는 SQL에서는 보통 rank() 함수를 사용하는 것이 좋겠지 만 MySQL과 같은 일부 SQL 언어에서는 사용할 수 없다. –

+0

예 MYSQL에 구현 됨 – user1716672

+0

제안 ID가 – twoleggedhorse

답변

1

이와 비슷한?

SELECT data.Asset, data.Price, o.offerID 
FROM  (
      SELECT o.assetID AS Asset, MAX(o.offer) AS Price 
      FROM assetTable AS a 
       INNER JOIN offerTable AS o 
        ON a.assetID = o.assetID  
      GROUP BY o.assetID 
     ) data 
      INNER JOIN offerTable AS o 
       ON data.Asset = o.assetID 
       AND data.Price = o.offer 
ORDER BY data.Price DESC, data.assetID 
+0

인 답변이 업데이트되었습니다. 이제 끔찍한 EAV SQL로 변환해야합니다. 고맙습니다! – user1716672

+0

이것은 각 자산에 대해 제공되는 최고가를 반환하지만 가장 높은 제안에 대한 다른 세부 정보는 반환하지 않습니다. 따라서 제공된 예에서 가장 높은 가치를 지닌 b 및 d 제안 인 것을 알 수 없습니다. –

+0

@MarkBannister 맞아요, 쿠폰이 offerID를 포함하도록 업데이트되었습니다. – twoleggedhorse

관련 문제