2013-03-06 99 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