У меня есть такая таблица сообщений:
message_id | body | from_user_id | to_user_id | is_read | sent_date
---------------------------------------------------------------------------
1 | hello | 23 | 31 | false | 2 min ago
---------------------------------------------------------------------------
2 | thank you | 28 | 31 | true | 4 min ago
---------------------------------------------------------------------------
3 | how are you? | 31 | 28 | false | 1 min ago
---------------------------------------------------------------------------
4 | a-ha | 29 | 31 | false | 6 min ago
Я хочу получить количество непрочитанных сообщений и последнее сообщение для текущего пользователя (например, user_id 31)
требуемыйрезультат:
from_user_id | to_user_id | body | sent_date | unread_message_count
-------------------------------------------------------------------
23 | 31 | hello | 2 min ago | 1
-------------------------------------------------------------------
31 | 28 | how are you? | 1 min ago | 0
-------------------------------------------------------------------
29 | 31 | a-ha | 6 min ago | 1
Я использовал следующий код:
WITH ranked_messages AS (
SELECT
messages.from_user_id, messages.to_user_id,
messages.body, messages.sent_date,
ROW_NUMBER() OVER
(PARTITION BY messages.from_user_id
ORDER BY messages.sent_date DESC) AS message_rank
FROM
messages
WHERE
messages.to_user_id = 31 OR
messages.from_user_id = 31
)
SELECT *
FROM ranked_messages
WHERE message_rank = 1;
, но я хочу также unread_message_count
для пользователя.
для примера:
select
count(*) as unread_message_count
from
messages
where
to_user_id = 31 and
is_read = false and
from_user_id = 23
Это должно быть рассчитано для каждого пользователя, отправляющего сообщения пользователю, и наоборот
Как мне достичь этого результата?