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