gpt4 book ai didi

objective-c - 用于按组选择具有最大值的行的 NSPredicate

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:12 25 4
gpt4 key购买 nike

我正在使用 Core Data 在表单中存储实体

跟踪器入口

  • 用户名
  • 时间戳

我想为每个用户选择最新的记录。使用 sql 会是这样的

SELECT MAX(timestamp) FROM Log GROUP BY username

有没有办法创建一个 NSPredicate 来做到这一点?

最佳答案

我会使用 NSExpression 来完成。下面的这段代码对您不起作用,因为您也必须按用户名分组,但这是无需获取所有内容即可执行此操作的最佳方式的开始。你想在数据库中执行 max 和 group,而不是在内存中 - 因为它会更快:

NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];

// Expression for the max
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"timestamp"];

NSEntityDescription *entity = [NSEntityDescription entityForName:entityName
inManagedObjectContext:self.coreDataStack.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setResultType:NSDictionaryResultType];

NSExpression *valueSumExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];

NSExpressionDescription *expressionDescription = [[[NSExpressionDescription alloc] init] autorelease];
[expressionDescription setName:@"maxTimestamp"];
[expressionDescription setExpression:valueSumExpression];
[expressionDescription setExpressionResultType:NSDecimalAttributeType];

[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Filter
//NSPredicate *pred = [NSPredicate predicateWithFormat:@" your predicate here"];
//fetchRequest.predicate = pred;

NSArray *results = [self.coreDataStack.managedObjectContext executeFetchRequest:fetchRequest error:nil];
if([results count] == 0) {

} else {

// [[results objectAtIndex:0] valueForKey:@"maxTimestamp"];

}

关于objective-c - 用于按组选择具有最大值的行的 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com