2014-04-30 28 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