除了CQL之外,这个问题与本文SQL Select only rows with Max Value on a Column基本相同。我正在使用Cassandra 3.10,因此支持GROUP BY,但HAVING和JOIN不支持。
与上述链接中的问题一样,我们需要在每个id中找到行(包括"内容"列),其中包含max(rev)。事实上,我试图解决的实际问题是通过两个标识符id1和id2进行max(rev)分组,因此按id排序也不会在这里工作。
+------+-------+-------+--------------------------------------+
| id1 | rev | id2 | content |
+------+-------+-------+------------------------------ -------+
| 1 | 1 | 1 | ... |
| 1 | 2 | 1 | ... |
| 2 | 1 | 2 | ... |
| 1 | 3 | 3 | ...
+------+-------+-------+--------------------------------------+
我对此的SQL解决方案是:
SELECT id1, id2, rev, content FROM table
GROUP BY id1, id2 HAVING rev = MAX(rev);
和
SELECT id1, id2, rev, content FROM table
WHERE rev IN
(SELECT MAX(rev) FROM table GROUP BY id1, id2)
(第二部作品假设rev是唯一的。)
没有HAVING或JOIN,在CQL或Cassandra 3.10中可行的方法是什么?