如何根据 apache ignite 缓存中的日期获取我的价值总和
How to get the sum of my value based on the dates from apache ignite cache
根据 ignite 缓存中的日期获取我的值总和的最佳方法是什么
我正在根据选定的日期从我的 postgres 数据库中获取我需要的所有数据。
值是 MyClass.class
中的字符串类型
date | value | account
01-01-2015 | 363947.5636999999987892806529998779296875 | 110589
23-08-2016 | 56985.5636999999987892806529998779296875 | 110589
30-11-2016 | 875347.5636999999987892806529998779296875 | 110589
23-11-2016 | 756247.5636999999987892806529998779296875 | 225863
然后我想使用我的缓存查询对返回值求和。最好的方法是什么?
IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);
Ignite ignite = Ignition.getOrStart(ignitionConfig);
IgniteCache<Integer, MyClass> cache = ignite.getOrCreateCache(cfg);
StringBuilder builder = new StringBuilder();
builder.append(" SELECT SUM(value) FROM MyClass WHERE");
builder.append(" date BETWEEN ? AND ? AND ");
builder.append(" account = ? ");
SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());
qry.setArgs(startDate);
qry.setArgs(endDate);
qry.setArgs(account);
try (QueryCursor<List<?>> cursor = cache.query(qry)) {
for (List<?> row : cursor){
System.out.println("test=" + row.get(0));
}
}
或者,我可以遍历每个结果,但我想先使用 SQL 方式。
将值转换为 double precision
或者,如果需要整个精度,则转换为 numeric
:
select sum(value::float)
from myclass
where date between ? and ? and account = ?
float
没有指定精度意味着 double precision
根据 ignite 缓存中的日期获取我的值总和的最佳方法是什么
我正在根据选定的日期从我的 postgres 数据库中获取我需要的所有数据。
值是 MyClass.class
中的字符串类型date | value | account
01-01-2015 | 363947.5636999999987892806529998779296875 | 110589
23-08-2016 | 56985.5636999999987892806529998779296875 | 110589
30-11-2016 | 875347.5636999999987892806529998779296875 | 110589
23-11-2016 | 756247.5636999999987892806529998779296875 | 225863
然后我想使用我的缓存查询对返回值求和。最好的方法是什么?
IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);
Ignite ignite = Ignition.getOrStart(ignitionConfig);
IgniteCache<Integer, MyClass> cache = ignite.getOrCreateCache(cfg);
StringBuilder builder = new StringBuilder();
builder.append(" SELECT SUM(value) FROM MyClass WHERE");
builder.append(" date BETWEEN ? AND ? AND ");
builder.append(" account = ? ");
SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());
qry.setArgs(startDate);
qry.setArgs(endDate);
qry.setArgs(account);
try (QueryCursor<List<?>> cursor = cache.query(qry)) {
for (List<?> row : cursor){
System.out.println("test=" + row.get(0));
}
}
或者,我可以遍历每个结果,但我想先使用 SQL 方式。
将值转换为 double precision
或者,如果需要整个精度,则转换为 numeric
:
select sum(value::float)
from myclass
where date between ? and ? and account = ?
float
没有指定精度意味着 double precision