я следующая таблицаПодсчет столбцов в запросе с группой по
id integer NOT NULL DEFAULT nextval('cl_id_seq'::regclass),
from_number character varying(30),
to_number character varying(30),
message text,
received_at timestamp with time zone,
sent_at timestamp with time zone,
reply_batch boolean DEFAULT false,
chat_id character varying(20),
insert_time timestamp with time zone DEFAULT now(),
own_account boolean DEFAULT false,
Я следующий запрос, который будет возвращать chat_ids разговоров, только если последнего сообщения (проверено на колонке insert_time) связана с chat_id имеет столбец own_account равным false.
select chat_id from message_log
where own_account = 'f'
and insert_time in
(
select distinct max(insert_time) from message_log group by chat_id
)
выше SQL работает отлично, но он возвращает разговоры без проверки, сколько раз own_account столбец верно в чате. Я хотел бы добавить возможность возвращать chat_ids из разговоров также в зависимости от того, сколько раз own_account является истинным.
Я пробовал много разных SQL-запросов, но я не могу добиться этой работы. Любая помощь будет оценена по достоинству.
Надеюсь, я достаточно ясен. если смутить что-нибудь, пожалуйста, прокомментируйте.
EDIT
Я загрузил данные по SQL Fiddle здесь
http://sqlfiddle.com/#!15/1d7dc/2
Если следующий запрос бежал он будет возвращать сообщения, относящиеся к чату
select * from message_log where chat_id = '1412' order by insert_time
Последнее сообщение не из own_account, и их осталось не больше 3 own_account Сообщения в результатах, поэтому следующий запрос должен возвращать это chat_id но это не
select m.chat_id
from message_log m
inner join
(select chat_id, max(insert_time) as max_insert_time,
count(case when own_account='t' then 1 else 0 end) as true_count
from message_log
group by chat_id) as latest
on m.chat_id = latest.chat_id and
m.insert_time = latest.max_insert_time
where
m.own_account = 'f' and latest.true_count <= 3
EDIT 2
Я создал еще один SQL скрипку здесь с одной записью
http://sqlfiddle.com/#!15/ad045/1
Граф (случай бит должен быть sum (case – Gary
@Gary Я изменил его на сумму, но и я загрузил базу данных одной строкой с сообщением, имеющим собственный_account false, и он не возвращает его – Arya
@Gary Я просто добавил еще одну скрипку – Arya