У меня есть простая временная таблица, которая выглядит так:
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
Мой вопрос: как мне получить набор самого последнего одобрения Фреда и Джека? То есть я хочу получить этот набор результатов:
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
Помощь