【发布时间】:2021-01-07 22:55:34
【问题描述】:
我在 Cassandra 中有一个表,其中存储了租户最近更新的详细信息。 有一个时间戳字段可以更新使用情况。我需要为每个租户找到最后更新的详细信息。 所以,考虑表结构是这样的:
现在,我需要这样的输出:
我写过这样的查询:
aQueries = ['t1','t2','t3'];
const query = `SELECT *
FROM system_log_stats.keyspaces_sizes
WHERE keyspace_name IN ? ORDER BY timestamp_sec DESC LIMIT 1`;
const res = await client.execute(query, [aQueries], { prepare: true});
但上面的查询只返回 1 个结果。
请注意,我必须使用 where IN 子句,因为我不想获取所有租户,而只想获取选定的租户。
【问题讨论】:
-
我认为您需要子选择所有租户 ID 和最大值(我们称之为
max_table),然后加入您的主表max_table.tenantId = main_table.tenantId and max_table.timestamp = main_table.timestamp。简单地使用max()和group by是行不通的,因为您也对usage值感兴趣,因此连接更复杂。可能有一种更有效的方法,但这会奏效。
标签: sql node.js cassandra greatest-n-per-group cql