2016-03-18 7 views
1

によって選択サブクエリとグループI次の表の構造を有する:PSQL:

  • SELECT membership_id &名
  • GROUP
  • membership_id BY最大を取得します。
    dev=> \d membership_subscription 
                 Table "public.membership_subscription" 
         Column  |   Type   |        Modifiers        
    --------------------+--------------------------+---------------------------------------------------------------------- 
    id     | integer     | not null default nextval('membership_subscription_id_seq'::regclass) 
    membership_id  | bigint     | not null 
    name    | character varying  | not null 
    description  | character varying  | 
    price_gross  | integer     | not null 
    price_net   | integer     | not null 
    tax    | double precision   | not null 
    priority   | integer     | not null default 0 
    currency_code  | character varying  | not null 
    calculated_gross | integer     | not null 
    calculated_net  | integer     | not null 
    state    | character varying  | 
    reference_date  | timestamp with time zone | not null 
    created_at   | timestamp with time zone | not null 
    created_by   | json      | not null 
    updated_at   | timestamp with time zone | not null 
    updated_by   | json      | not null 
    payment_method_id | bigint     | 
    code    | character varying  | 
    bookings_per_month | integer     | not null default 0 
    bookings_per_venue | integer     | not null default 0 
    Indexes: 
        "membership_subscription_pkey" PRIMARY KEY, btree (id) 
        "membership_id_reference_date_index" UNIQUE, btree (membership_id, reference_date) 
    Foreign-key constraints: 
        "membership_subscription_membership_id_fkey" FOREIGN KEY (membership_id) REFERENCES membership(id) ON UPDATE CASCADE 
        "membership_subscription_payment_method_id_fkey" FOREIGN KEY (payment_method_id) REFERENCES payment_saved_method(id) ON UPDATE CASCADE ON DELETE SET NULL 
    

    は私がしたいのreference_date
  • ( 'new'、 'discurded')にありません

注: 私だけではない状態で(「新しい」「破棄」)のものを選択したいので、すべての会員が12個のサブスクリプションを持っているそれらの後、最大reference_date

私の試み:

dev=> SELECT membership_id, name FROM membership_subscription WHERE state NOT IN ('new', 'discurded') GROUP BY membership_id, name, reference_date ORDER BY reference_date DESC; 

しかし、私

答えて

0
WITH membership_subscription(membership_id,name,state,reference_date) AS (VALUES 
    (1,'name-1','new','2016-03-18'::DATE), 
    (1,'name-2','discurded','2016-03-17'::DATE), 
    (1,'name-3','state 1','2016-03-16'::DATE), -- record #1 to select 
    (1,'name-4','state 2','2016-03-15'::DATE), 
    (2,'name-5','new','2015-03-15'::DATE), 
    (2,'name-6','discurded','2015-03-16'::DATE), 
    (2,'name-7','state 3','2015-03-17'::DATE), 
    (2,'name-8','state 4','2015-03-18'::DATE) -- record #2 to select 
) 
SELECT 
    DISTINCT ON (membership_id) 
    membership_id, 
    name, 
    max(reference_date) 
FROM membership_subscription 
WHERE state NOT IN ('new','discurded') 
GROUP BY membership_id,name; 
0

あなたのミスがグループにreference_dateを含めることで、それを削除し、クエリが動作するはずのために期待したものは戻りません。各グループで最新のreference_dateを取得するには、集計関数maxを使用する必要があります。

コード(私はそれをテストしていない):

SELECT membership_id, name, max(reference_date) FROM membership_subscription WHERE state NOT IN ('new', 'discurded') GROUP BY membership_id, name ORDER BY 3 DESC; 
関連する問題