基于GROUP BY
个月的SUM
核心数据是否有办法------------------------
date | amount
------------------------
30-08-2017 | 124000000
28-10-2017 | 124000000
16-10-2017 | 124000000
14-12-2017 | 124000000
20-12-2017 | 124000000
------------------------
?
我有这样的数据
NSDate *now = [NSDate date];
NSDate *oneYearAgo = [now addYears:-1];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyTable" inManagedObjectContext:moc];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(myDate >= %@) AND (myDate <= %@) AND isActive == %@", oneYearAgo, now, @YES];
[request setPredicate:predicate];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"myDate" ascending:YES];
[request setSortDescriptors:@[sort]];
NSExpressionDescription* ex = [[NSExpressionDescription alloc] init];
[ex setName:@"totalCost"];
[ex setExpression:[NSExpression expressionWithFormat:@"@sum.amount"]];
[ex setExpressionResultType:NSDecimalAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"myDate", ex, nil]];
[request setPropertiesToGroupBy:[NSArray arrayWithObject:@"myDate"]];
[request setResultType:NSDictionaryResultType ];
NSArray *result = [moc executeFetchRequest:request error:nil];
我只需要显示最近一年,所以我创建了这样的获取请求
Aug 2017 | 124000000
Oct 2017 | 248000000
Dec 2017 | 248000000
这是我所需要的最接近的解决方案,但该分组仍然基于日期而是月份,而且它的数量并不总和。
所以我想得到像这样的结果
<html>
<head>
<style>
body {
background-image:url(image.png);
}
</style>
</head>
<body>
<form>
</form>
</body>
</html>
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您可以将NSFetchResultsContoller与自定义部分路径一起使用,以根据月份对数据进行分组。然后,您可以汇总该部分中的所有项目以获得所需的结果。以下代码段可用于创建获取结果控制器
NSFetchedResultsController *dateAmountFetchResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"monthIndex" cacheName:@"MyEntity"];
在DateAmount实体上创建一个新的瞬态属性,名为&#34; monthIndex&#34;。然后在DateAmount类 - (NSString *)monthIndex上创建一个方法,以返回正确的月号字符串。 @&#34; monthIndex&#34;应该按照上面的代码片段用作获取结果控制器的节名称键路径。 在获取请求的排序描述符中,使用带有键@&#34; monthIndex&#34;的排序描述符。用于排序项目,因为它是NSFetchedResultsController的要求。