我的目标是在给定的时间范围内(fromDate < stats_date_id < toDate)对每个 DISTINCT provider_id 值计算 messages_sent 和 emails_sent 的总和,但不指定 provider_id。换句话说,我需要了解指定时间范围内的所有提供者,并将它们的messages_sent 和emails_sent 相加。
我有一个使用 express-cassandra 模式(在 Node.js 中)的 Cassandra 表,如下所示:
module.exports = {
fields: {
stats_provider_id: {
type: 'uuid',
default: {
'$db_function': 'uuid()'
}
},
stats_date_id: {
type: 'timeuuid',
default: {
'$db_function': 'now()'
}
},
provider_id: 'uuid',
provider_name: 'text',
messages_sent: 'int',
emails_sent: 'int'
},
key: [
[
'stats_date_id'
],
'created_at'
],
table_name: 'stats_provider',
options: {
timestamps: {
createdAt: 'created_at', // defaults to createdAt
updatedAt: 'updated_at' // defaults to updatedAt
}
}
}
为了让它工作,我希望它就像执行以下操作一样简单:
let query = {
stats_date_id: {
'$gt': db.models.minTimeuuid(fromDate),
'$lt': db.models.maxTimeuuid(toDate)
}
};
let selectQueries = [
'provider_name',
'provider_id',
'count(direct_sent) as direct_sent',
'count(messages_sent) as messages_sent',
'count(emails_sent) as emails_sent',
];
// Query stats_provider table
let providerData = await db.models.instance.StatsProvider.findAsync(query, {select: selectQueries});
然而,这抱怨需要过滤结果:
Error during find query on DB -> ResponseError: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance
.
我猜你不能有一个主键并对其进行日期范围搜索?如果是这样,这种查询的正确方法是什么?