使用带Postgres的DBIx :: Class来完成最大N组的查询?

时间:2013-01-25 00:35:33

标签: perl greatest-n-per-group dbix-class

目前,我正在使用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
);

0 个答案:

没有答案