2014-04-30 32 views
-2

何我只能獲取具有最高cvID值的行?選擇具有最高值和加入的行

當前代碼

SELECT 
    CollectionVersionBlocks.cID, 
    CollectionVersionBlocks.cbDisplayOrder, 
    CollectionVersionBlocks.cvID, 
    btContentLocal.bID, 
    btContentLocal.content 
FROM 
    CollectionVersionBlocks 
    INNER JOIN btContentLocal 
    ON CollectionVersionBlocks.bID = btContentLocal.bID 
WHERE (CollectionVersionBlocks.cID = 259) 
    AND CollectionVersionBlocks.isOriginal = 1 
    AND CollectionVersionBlocks.arHandle = 'main' 
    AND btContentLocal.content != '' 

我想獲得該行的底部(其中CVID值爲10)。

這是一個更大的結果集的測試語句 -

我最終需要一套從perset CIDS結果(CollectionVersionBlocks.cID = 259 OR CollectionVersionBlocks.cID = 260 ... 800高達)

picture of result

更新截圖

1)結果太少 2)未分組結果

result2

enter image description here

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

+1

是否嘗試過MySQL(CollectionVersionBlocks.cvID) –

+0

MySQL。嘗試了最大值(CollectionVersionBlocks.cvID),但它給了我一個不正確的btContentLocal連接。由於某種原因,它顯示了出價349 – v3nt

回答

0

嘗試以下查詢:

SELECT CollectionVersionBlocks.cID,CollectionVersionBlocks.cbDisplayOrder,  CollectionVersionBlocks.cvID , btContentLocal.bID , btContentLocal.content 
FROM CollectionVersionBlocks 
INNER JOIN btContentLocal 
ON CollectionVersionBlocks.bID=btContentLocal.bID 
WHERE (CollectionVersionBlocks.cID = 259) 
AND CollectionVersionBlocks.isOriginal=1 AND CollectionVersionBlocks.arHandle ='main'   AND   btContentLocal.content !='' and CollectionVersionBlocks.cID in 
(

    SELECT Max(CollectionVersionBlocks.cID) 
    FROM CollectionVersionBlocks 
    INNER JOIN btContentLocal 
    ON CollectionVersionBlocks.bID=btContentLocal.bID 
    WHERE (CollectionVersionBlocks.cID = 259) 
    AND CollectionVersionBlocks.isOriginal=1 AND CollectionVersionBlocks.arHandle ='main' AND btContentLocal.content !='') 
+0

謝謝 - 試過,但它仍然給我4個結果。 (高值來自cvID而不是cID) – v3nt

2

要獲得每組最高行(從你的問題我認爲cID作爲一個組)您可以通過使用這樣做自您想要的列的最大值在你的第三個加入使用附加條件加入即ON(c.cID=cc.cID AND c.cvID=cc.cvID)

SELECT 
    c.cID, 
    c.cbDisplayOrder, 
    c.cvID, 
    b.bID, 
    b.content 
FROM 
    CollectionVersionBlocks c 
    INNER JOIN btContentLocal b 
    ON (c.bID = b.bID) 
    INNER JOIN 
    (SELECT cID, MAX(cvID) cvID FROM CollectionVersionBlocks GROUP BY cID) cc 
    ON(c.cID=cc.cID AND c.cvID=cc.cvID) 
WHERE (c.cID = 259) 
    AND c.isOriginal = 1 
    AND c.arHandle = 'main' 
    AND b.content != '' 

和多個組可以使用WHERE c.cID IN(259,....800)

+0

感謝M Khalid Junaid,這很接近,但它似乎排除了一些結果[見新的截圖]。它與第二次INNER JOIN有關。 – v3nt

+0

@danielCrabbe你發佈了截圖嗎?如果您可以向上提供樣本數據集 –

+0

的[** sql fiddle demo **](http://www.sqlfiddle.com/),它的效果會更好。我會這樣做,但這個數據是一團糟,並有成千上萬的行和條目和150 +表。 – v3nt