0
我有以下表格跟踪的聊天消息记录SQL查询来算基于ID和另一个布尔列
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
的每一行都有设置为true或false的列reply_batch
。我希望查询返回reply_batch
列中具有少于两个“真”布尔值的所有match_id
。
编辑@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