У меня есть следующие структуры таблицы:PSQL: выберите вложенный запрос и группы по
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
Я хочу:
- ВЫБРАТЬ membership_id & имя
- GROUP BY membership_id
- Получите максимум reference_date
- Не в ('новый', '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;
Но не вернуть то, что ожидалось для меня