目前,我正在使用DBIx :: Class和SQLite及其GROUP BY
来查询每组最大的行数;根据{{3}},MySQL [和SQLite]使用非标准方法返回组内的额外列。我正在从SQLite迁移到Postgres,所以我的查询自然会被破坏(因为Postgres不允许GROUP BY
返回非组列。
有没有办法在Postgres数据库上使用DBIx :: Class并获得相同的结果?我查看了文档,似乎我可以使用DISTINCT ON
,虽然我不知道如何使用该模块。
我正在使用的表是:
CREATE table actions (
id SERIAL PRIMARY KEY,
end BOOLEAN,
type VARCHAR(15) NOT NULL,
subtype_a VARCHAR(15),
subtype_b VARCHAR(15),
);
...在我使用的查询之前等于:
SELECT me.*,max(me.id) FROM actions me WHERE me.type = 'sometype' AND me.end IS NOT NULL AND me.subtype_a = 'somesubtype' GROUP BY me.subtype_a,me.subtypeb;
...在perl:
my $attrs = {
order_by => { -asc => 'me.id' },
group_by => [qw/me.subtype_a me.subtype_b/],
join => 'anothertable',
columns => [qw/me.subtype_a me.subtype_b/],
'+select' => [ 'anothertable.fielda', { max => 'me.id' } ],
'+as' => [qw/fielda id/],
};
my @actions = $db->resultset('Action')->search({
-and => [
'me.type' => "sometype",
'me.end' => { '!=' => undef },
],
},
$attrs
);