Чтобы это работало, вы полагаетесь на некорректное поведение базы данных.Вы не сможете выбирать столбцы из таблицы, когда используете group by , если только они не используют агрегатную функцию (min, max и т. Д.) Или не указаны в предложении group by.
В MySQL даже руководство признает, что это неправильно - хотя оно и поддерживает это.
Я думаю, что вам нужно сделать, это получить последние даты обзоров с max (pub_date):
my $dates = $schema->resultset('Review')->search({},
{
select => ['artist_id', 'album_id', {max => 'pub_date'}],
as => [ qw(artist_id album_id recent_pub_date) ],
group_by => [ qw(artist_id album_id) ],
}
);
Затем перейдите к циклу, чтобы получить обзор:
while (my $review_date = $dates->next) {
my $review = $schema->resultset('Review')->search({
artist_id => $review_date->artist_id,
album_id => $review_date->album_id,
pub_date => $review_date->get_column('recent_pub_date'),
})->first;
}
Да - это больше запросов, но имеет смысл - что, если два отзыва находятся в одну и ту же дату - как БДзнаете, какой из них вернуть в операторе выбора?