я следующая таблица, которая отслеживает чат сообщения журналовSQL-запрос для подсчета на основе идентификатора и другую булевой колонку
CREATE TABLE public.perm_message_log
(
id bigint NOT NULL DEFAULT nextval('perm_message_log_id_seq'::regclass),
message text,
from_id text,
to_id text,
match_id text,
unix_timestamp bigint,
own_account boolean,
reply_batch boolean DEFAULT false,
insert_time timestamp with time zone DEFAULT now(),
account_id bigint,
match_pk bigint
)
каждый разговор имеет то же match_id
я хочу построить SQL запрос, который будет возвращать match_ids только если для сообщений не более двух reply_batch = true
для сообщений с одинаковыми match_id
Надеюсь, я смог написать это достаточно четко.
Каждая строка, содержащая message
, имеет столбец reply_batch
, который имеет значение true или false. Я хочу, чтобы запрос возвращал все match_id
s, которые имеют менее двух «истинных» булевых значений для столбца reply_batch
.
EDIT @TimBiegeleisen
Спасибо за ваш ответ, что, если бы я удалить строки вашего возвращения ответа в другой таблице? Я придумал запрос ниже, но это неправильно.
delete from already_matched where already_matched.userid = (
WITH cte AS (
SELECT match_id
FROM public.perm_message_log
GROUP BY match_id
HAVING SUM(CASE WHEN reply_batch THEN 1 ELSE 0 END) = 0
)
SELECT t1.from_id
FROM public.perm_message_log t1
INNER JOIN cte t2
ON t1.match_id = t2.match_id
WHERE NOT t1.own_account)
Спасибо за ответ , Я думаю, что верхняя часть делает то, что мне нужно. Я не понимаю, какова будет цель второй части. – Arya
Я предположил, что вы хотите вернуть фактические записи, соответствующие совпадающим значениям 'match_id'. Если нет, то да, только CTE должен выполнить эту работу. –
Спасибо, я действительно хочу больше из запроса, я пытаюсь понять это сейчас – Arya