我有一个简单的临时表,如下所示:
Table: item_approval
item user status modified
2 fred approved 2010-12-01 00:00:00
3 fred approved 2010-12-02 00:00:00
4 fred disapproved 2010-12-03 00:00:00
7 jack unapproved 2010-12-05 00:00:00
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
4 fred disapproved 2010-12-04 00:00:00
我正在使用 DBIx::Class。我的“项目”结果定义为:
__PACKAGE__->has_many(
"item_approvals",
"Schema::Result::ItemApproval",
{ "foreign.item" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
这意味着我可以做到:
my $item = $schema->resultset('Item')->find({id=>4});
这很好。然后,我可以这样做:
my @approvals = $item->item_approvals;
得到这样的结果集:
item user status modified
4 fred disapproved 2010-12-03 00:00:00
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
4 fred disapproved 2010-12-04 00:00:00
我的问题:如何获得 Fred 和 Jack 的单人最新批准状态集?也就是说,我想得到这个结果集:
item user status modified
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
我试过这样的事情:
my @approvals = $item->search({}, {
group_by => 'user',
order_by => {-desc => 'modified'}
});
但是“ORDER BY”是在“GROUP BY”之后执行的,所以我得到了这样的东西:
item user status modified
4 fred disapproved 2010-12-03 00:00:00
4 jack unapproved 2010-12-07 00:00:00
帮助?