次のような単純な時間テーブルがあります。
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'}
});
ただし、「ORDERBY」は「GROUPBY」の後に実行されるため、代わりに次のようになります。
item user status modified
4 fred disapproved 2010-12-03 00:00:00
4 jack unapproved 2010-12-07 00:00:00
ヘルプ?