2013-03-06 60 views
1

首先,我正在处理一个EAV数据库,所以当我说实体时,它和表格一样。按排序顺序的顶部结果排序

我有一个“资产”实体,每个资产都有很多“优惠”。每个报价都有一个价格属性。我想以每个资产的最高价格返回报价,并且这也必须按照最高价格进行订购。因此,例如:

资产1具有3个报价(a,b和c)与价格:$ 4的(a),$ 7.25(b)和$ 5的(c)

资产2具有2个报价有价$ 9(d)(d和e)和$ 3(E)

所以结果集应该是这样的:

Offer  Price  Asset 
d   $9   2 
b   $7.25  1 

我没有提供任何SQL的原因是因为我的工作非关系数据库,凡事我s在4个表中保存 - 实体表,子类型表,元字符串和元数据。但我只是想要这个概念性的答案,就好像这是一个关系数据库,我可以把它翻译成EAV SQL。

+0

这是一个在RDBMS(如MySQL)上实现的EAV,如果是这样,哪个RDBMS,还是在某种其他类型的数据库管理系统上? (我问的原因是,在SQL中,我通常会推荐使用'rank()'函数,但这在SQL的某些方言中不可用,例如MySQL)。 – 2013-03-06 14:17:32

+0

是的,它在MYSQL上实现 – user1716672 2013-03-06 14:23:11

+0

答案更新包括offerID – twoleggedhorse 2013-03-06 14:47:06

回答

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 2013-03-06 14:22:08

+0

这将返回为每个资产提供的最高价格,但不会提供最高报价的任何其他详细信息 - 因此,在提供的示例中,您不会知道这是价值最高的报价b和d。 – 2013-03-06 14:23:46

+0

@MarkBannister完全正确,答案更新以包含offerID。 – twoleggedhorse 2013-03-06 14:46:02