Cassandra CQL-在时间戳之前从1开始获取记录

Cassandra CQL-在时间戳之前从1开始获取记录,cassandra,cql,Cassandra,Cql,我有下表: 创建表记录( 设备id文本, 读取时间戳, 数据行文本, 主键(设备id、读取时间)) 按聚类顺序(读取时间描述); 我想获取所有记录,从特定读取时间之前的记录开始。 有办法吗? 我想也许在之前的阅读时间有另一个领域,但这将很难做到 维护,因为我有时会出现无序读取。我认为没有任何CQL语句可以做到这一点(时间戳列上的筛选器加上与时间筛选器不匹配的第一条记录)。但是,根据你的具体情况,也许下面这样的东西适合你 例如,我将查找所有读取时间在2020-05-14 00:00:01之后的

我有下表:


创建表记录(
设备id文本,
读取时间戳,
数据行文本,
主键(设备id、读取时间))
按聚类顺序(读取时间描述);

我想获取所有记录,从特定读取时间之前的记录开始。 有办法吗? 我想也许在之前的阅读时间有另一个领域,但这将很难做到
维护,因为我有时会出现无序读取。

我认为没有任何CQL语句可以做到这一点(时间戳列上的筛选器加上与时间筛选器不匹配的第一条记录)。但是,根据你的具体情况,也许下面这样的东西适合你

例如,我将查找所有读取时间在
2020-05-14 00:00:01
之后的记录,以及
2020-05-14 00:00:01
之前或之前的第一个记录:

  • 选择我选择的时间之后的所有记录(
    2020-05-14 00:00:01
  • 从第一次查询的结果中,获取读取时间最接近
    2020-05-14 00:00:01
    的记录
  • 再次选择并查找第一条记录,该记录位于您在步骤2中找到的“最接近过滤时间”之前:
  • 从记录中选择*,其中设备id=?读取时间<2020-05-14 00:00:55限制1;
    
    我现在将使用它,但我很高兴知道一种更有效的方法,因为我会做很多次。。。谢谢
    SELECT * FROM records WHERE device_id=? AND read_time > '2020-05-14 00:00:01';
    
    // Let's say you find records with the following times. 
    // The earliest (closest to the filter's time) is 2020-05-14 00:00:55
    2020-05-14 00:00:55
    2020-05-14 00:00:56
    2020-05-14 00:30:55
    2020-05-14 13:30:55
    
    
    SELECT * FROM records WHERE device_id=? AND read_time < 2020-05-14 00:00:55 LIMIT 1;