【发布时间】:2020-10-22 22:36:13
【问题描述】:
我需要找到具有给定 stationid 且 time1 大于指定时间和最大 time2 的行。
表是这样创建的:
CREATE TABLE forec (
stationid int,
time1 timestamp,
time2 timestamp,
value double,
PRIMARY KEY ((stationid), time1, time2)
) WITH CLUSTERING ORDER BY (time1 DESC)
假设表中的数据是这样的:
+------------+-----------------------+----------------------+--------+
| stationid | time1 | time2 | value |
+------------+-----------------------+----------------------+--------+
| 1 | 2020-10-21 06:00:00 | 2020-10-21 05:00:00 | 1 |
| 1 | 2020-10-21 06:00:00 | 2020-10-21 04:00:00 | 2 |
| 1 | 2020-10-21 06:00:00 | 2020-10-21 03:00:00 | 3 |
| 1 | 2020-10-21 05:00:00 | 2020-10-21 04:00:00 | 4 |
| 1 | 2020-10-21 05:00:00 | 2020-10-21 03:00:00 | 5 |
| 1 | 2020-10-21 04:00:00 | 2020-10-21 02:00:00 | 6 |
+------------+-----------------------+----------------------+--------+
我想查询: 给我所有 stationid = 1 和 time1 >= 2020-10-21 05:00:00 并且 time2 具有最大值的行。查询应返回以下行:
+------------+-----------------------+----------------------+--------+
| stationid | time1 | time2 | value |
+------------+-----------------------+----------------------+--------+
| 1 | 2020-10-21 06:00:00 | 2020-10-21 05:00:00 | 1 |
| 1 | 2020-10-21 05:00:00 | 2020-10-21 04:00:00 | 4 |
+------------+-----------------------+----------------------+--------+
我知道我可以这样查询:
SELECT * FROM forec WHERE stationid = 1 AND time1 >= '2020-10-21 05:00:00';
然后在客户端过滤结果(并仅保留具有最大时间的行2),但是我想知道这是否可以更有效地完成(在 Cassandra 端过滤结果)。
或者我应该改变表格模型?
【问题讨论】:
-
并非如此 - CQL 的功能非常有限