Поиск в личных сообщениях (интервал)

Подробный анализ всех сообщений, отправленных и полученных пользователем в заданный период времени.

-- [параметры]
-- user_id :user
-- string :interval = 1 месяц

SELECT 
    chat_channel_id,
    user_id,
    message,
    created_at AS reltime$time,
    created_at 
FROM chat_messages
WHERE chat_channel_id IN (
       SELECT cc.id
       FROM chat_channels cc
       JOIN chat_messages cm ON cm.chat_channel_id = cc.id
       WHERE cc.chatable_type = 'DirectMessage'
       AND cm.user_id = :user
   )
AND created_at::date > CURRENT_TIMESTAMP - INTERVAL :interval
ORDER BY chat_channel_id DESC, created_at ASC

Этот вариант всё ещё работает, но я заметил, что в него нужно внести небольшую правку, чтобы учесть некоторые изменения в таблицах, которые были внесены некоторое время назад. Это влияет только на идентификаторы каналов, так что это не является критической проблемой.