3

これは私のテーブル「AuctionDetails」です

競売

以下を選択します。

select string_agg("AuctionNO",',' ) as  "AuctionNO"
      ,sum("QuntityInAuction" ) as "QuntityInAuction"
      ,"AmmanatPattiID"
      ,"EntryPassDetailsId" 
      ,"BrokerID"
      ,"TraderID"
      ,"IsSold"
      ,"IsActive"
      ,"IsExit"
      ,"IsNew"
      ,"CreationDate"
from "AuctionDetails"
group by "AmmanatPattiID"
        ,"EntryPassDetailsId"  
        ,"TraderID"
        ,"IsSold"
        ,"IsActive"
        ,"IsExit"
        ,"IsNew"
        ,"BrokerID"
        ,"CreationDate"

この結果が得られます:

これが私の結果です

しかし、私は次のような記録が必要です

AuctionNo                                QunatityInAuction  AmmanatpattiID  EntryPassDetailID  BrokerID  Trader ID  IsSold  ISActive  ISExit  IsNew  CreationDate
AU8797897,AU8797886,AU596220196F37379    1050               -1               228,229            42         42         f         t       f      t      2013-10-10

最後に、私たちの場合は「42」であるトレーダーとブローカーの最新のエントリ、数量の合計、およびオークション番号の連結が必要です...

4

2 に答える 2

2

Postgres wiki では、独自の FIRST および LAST 集計関数を定義する方法について説明しています。例えば:

-- Create a function that always returns the last non-NULL item
CREATE OR REPLACE FUNCTION public.last_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE SQL IMMUTABLE STRICT AS $$
        SELECT $2;
$$;

-- And then wrap an aggregate around it
CREATE AGGREGATE public.LAST (
        sfunc    = public.last_agg,
        basetype = anyelement,
        stype    = anyelement
);

ページはこちら: https://wiki.postgresql.org/wiki/First/last_(集合)

于 2017-12-17T00:55:17.280 に答える
0

これにはさまざまな方法があります。集約関数とウィンドウ関数の組み合わせ、またはウィンドウ関数とDISTINCT...

SELECT a.*, b.*
FROM  (
   SELECT string_agg("AuctionNO", ',') AS  "AuctionNO"
         ,sum("QuntityInAuction") AS "QuntityInAuction"
   FROM   "AuctionDetails"
   ) a
CROSS JOIN (
   SELECT "AmmanatPattiID"
         ,"EntryPassDetailsId" 
         ,"BrokerID"
         ,"TraderID"
         ,"IsSold"
         ,"IsActive"
         ,"IsExit"
         ,"IsNew"
         ,"CreationDate"
   FROM   "AuctionDetails"
   ORDER  BY "AuctionID" DESC
   LIMIT  1
   ) b

テーブル全体に対する 1 つの結果行という単純なケースでは、これが最も単純な場合があります。

于 2013-10-10T07:15:11.033 に答える