0
类
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 ::类。我的 “项目” 结果与定义:
__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
我的问题:我如何设定的弗雷德和杰克的最近期的审批状态?也就是说,我要得到这个结果集:
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
帮助?
我不知道perl或者dbix,但是SQL的做法是让你的'modified'字段变成'Modified',这会返回每个用户的最高日期。 – JNK 2010-12-15 18:31:22
我玩过这一点,使用的东西如下:SELECT item,user,status,MAX(modified)as most_recent FROM item_approval WHERE id = 4;但它不会返回每个用户的最高日期*;它只返回日期最高的单行。 – 2010-12-15 19:09:08
您需要同时执行“MAX(修改)”和“GROUP BY用户”。没有“GROUP”的'MAX'为您提供查询的最大值。 'GROUP BY'为您提供了GROUP BY中每个组的最大值(或其他聚合函数,如'SUM','AVG'等)。 – JNK 2010-12-15 19:31:48