У меня есть следующая таблица, которая используется для автоответчика, отслеживает все сообщения, обменянные на каждого человека. Он отслеживает каждое лицо по match_id
сложный sql-запрос, объединяющий 'select max' и select count (*) запросы
CREATE TABLE public.sms_log
(
id bigint NOT NULL DEFAULT nextval('sms_log_id_seq'::regclass),
source text NOT NULL,
destination text NOT NULL,
message text,
insert_time timestamp with time zone DEFAULT now(),
reply_batch boolean DEFAULT false,
own_reply boolean DEFAULT false,
match_id text NOT NULL,
CONSTRAINT sms_log_pkey PRIMARY KEY (id),
CONSTRAINT sms_log_match_id_fkey FOREIGN KEY (match_id)
REFERENCES public.match (match_id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
)
Сейчас у меня есть следующий запрос, который возвращает строку match_id
, если последнее сообщение отправлены было own_reply
, как ложные. (В значительной степени проверяет, кто послал систему сообщение от последнего времени система ответила на них)
QUERY
select m.*
from sms_log m
where m.source <> 'MYNUMBER'
and m.destination = 'MYNUMBER'
and m.insert_time = (select max(insert_time)
from sms_log
where match_id = m.match_id
group by match_id)
Затем я использую петлю внутри программы, чтобы определить, сколько раз программа имеет ответил на match_id
, используя следующий запрос
QUERY B
select count(*) from sms_log where match_id = ? and reply_batch = true
можно ли объединить эти два запроса таким образом, что QU ERY A вернет match_ids только в том случае, если счетчик answer_batch меньше 3?
Просьба представить некоторые выборочные данные и ожидаемые данные. – Viki888