나는 채팅 메시지를 추적하는 다음 표는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
내가 match_ids을 반환 SQL 쿼리를 구성 할있다 기록했다 메시지가 동일한 경우에만 reply_batch = true
이 두 개 미만인 경우에만 match_id
나는 분명히 충분히 쓸 수 있었으면 좋겠다.
message
이 포함 된 각 행의 열은 reply_batch
이며 true 또는 false로 설정됩니다. 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