2017-07-14 24 views
1

表格数据如下所示。表有时间戳集群顺序递减,并且主键(名字,时间戳):卡桑德拉 - 如何做分组和限制查询?

name - address - timestamp 
John - J_Addr 1 - Jan 01, 2017 
John - J_Addr 2 - Feb 05, 2017 
Mark - M_Addr 1 - Jan 01, 2017 
Mark - M_Addr 2 - Mar 05, 2017 

是否有一种方式来获得最新的地址,每个名字? 在上述情况下,预期的结果将是:

name - address - timestamp 
John - J_Addr 2 - Feb 05, 2017 
Mark - M_Addr 2 - Mar 05, 2017 
+0

什么是你的表的分区键? –

+0

@AshrafulIslam主键是(名称,时间戳) – wittyameta

回答

1

如果使用卡桑德拉版本> = 3.6则可以使用PER PARTITION LIMIT

实施例:

SELECT * FROM table_name PER PARTITION LIMIT 1; 

否则如果您正在插入当前时间的每个时间戳值,然后您可以创建如下所示的另一个表格:

CREATE TABLE user_address (
    name text PRIMARY KEY, 
    address text 
); 

无论何时插入到基表中,也会插入维护表中。如果你想维护这些表之间的原子性,你可以使用批处理。

因此,每次为用户插入地址时,地址都会被插入。所以,你会得到最新的地址

否则,您必须通过扫描限制的所有行和组从客户端

+0

是的,物化视图将有助于我的情况。 – wittyameta

+0

@wittyameta哎呀抱歉。物化视图主键必须包含基表的所有主键。所以在你的情况下,你不能创建物化视图,只有名称作为主键 –

+0

任何其他解决方案,而不会限制它从客户端? – wittyameta