我创建表格
CREATE TABLE sm.data (
did int,
tid int,
ts timestamp,
aval text,
dval decimal,
PRIMARY KEY (did, tid, ts)
) WITH CLUSTERING ORDER BY (tid ASC, ts DESC);
在我使用ts DESC进行所有选择查询之前,所以它很好。现在我还需要在某些情况下使用ts ASC进行选择查询。我该如何做到这一点?谢谢
答案 0 :(得分:1)
您只需使用ORDER BY ts ASC
即可示例:
SELECT * FROM data WHERE did = ? and tid = ? ORDER BY ts ASC
答案 1 :(得分:0)
如果你这样做,请选择
从数据中选择*,其中did = 1且tid = 2,按ts asc排序;
你最终会遇到一些错误
InvalidRequest:来自服务器的错误:代码= 2200 [无效查询]消息=&#34;目前订单仅支持在PRIMARY KEY&#34; <中声明的订单后的列的排序/ p>
我已经对我当地的cassandra db进行了测试 我想改变主键列的顺序
原因是: &#34;查询复合主键和排序结果ORDER BY子句只能选择一列。该列必须是复合PRIMARY KEY中的第二列。&#34;
CREATE TABLE data2( 做了int, tid int, ts时间戳, aval文本, 小数十进制, 主要关键(做,ts,tid) )具有聚集顺序(ts DESC,tid ASC)
现在我们可以自由选择TS的排序类型
卡桑德拉@ cqlsh:航空公司&GT; SELECT * FROM data2 WHERE做了= 1,ts = 2顺序由ts DESC;
做了| ts | tid | aval | DVAL ----- + ---- + ----- + + ------ ------
(0行) 卡桑德拉@ cqlsh:航空公司&GT; SELECT * FROM data2 WHERE做了= 1而ts = 2按ts ASC排序;
做了| ts | tid | aval | DVAL ----- + ---- + ----- + + ------ ------
(0行)
另一种方法是创建一个新表或一个物化视图,后者将导致场景背后的数据重复 希望足够清楚