Как я могу получить несколько значений из одного запроса - PullRequest
0 голосов
/ 30 января 2019

Я создаю приложение чата, в котором я использую Firebase для отправки и получения сообщений.После отправки или получения сообщения я сохраняю его в SQLite следующим образом.Теперь на экране недавних чатов мне нужно последнее сообщение из всех уникальных чатов (все сообщения между уникальной парой SentTo и SentBy, т. Е. Mid A & B - из одного уникального чата), отсортированные по sentTime, числу непрочитанных сообщений в этих уникальных чатах.чаты в одном запросе, когда я наблюдаю за базой данных SQLite.

Mid(STRING)     | SentBy | SentT0 | message | readTime | sentTime| Type
----------------+--------+--------+---------+----------+---------+------
A               | AA     | JD     | M1      |   1      |    0    |  S
B               | JD     | AA     | M2      |   2      |    1    |  s
C               | AA     | JD     | M3      |   3      |    2    |  s
D               | AB     | JD     | m5      |   null   |    3    |  s
E               | AA     | JC     | M1      |   5      |    4    |  s
F               | JD     | AB     | M2      |   6      |    5    |  s
G               | AA     | JD     | M3      |   7      |    6    |  s
H               | AA     | JC     | m5      |   8      |    7    |  s
I               | AA     | JD     | M1      |   null   |    8    |  s
J               | JD     | AA     | M2      |  10      |    9    |  s
K               | AA     | JD     | M3      |  11      |    10   |  s
L               | AB     | JC     | m5      |  12      |    11   |  s
M               | AA     | JD     | M1      |  13      |    12   |  s
N               | JC     | AA     | M2      |  14      |    13   |  s
O               | AB     | JD     | M3      |  15      |    14   |  s
P               | JC     | JD     | m5      |  16      |    15   |  s

Я пытался

'SELECT * , COUNT (*)from $messagesListTableName as C GROUP BY $columnSentBy , $columnSentTo ' 

Это дало мне последние сообщения и количество уникальных пар, но не сгруппировалих по разговору.Итак, я получил два последних сообщения для каждой пары.Я могу сгруппировать их позже, но я не получил количество невидимых сообщений.

1 Ответ

0 голосов
/ 30 января 2019

Если уникальный чат определен парой sentBy / sentTo (независимо от порядка), то в самых последних версиях SQLite вы можете использовать оконные функции:

select t.*
from (select t.*,
             row_number() over (partition by min(sentBy, sentTo), max(sentBy, sentTo) order by senttime desc) as seqnum,
             sum(case when readtime is null then 1 else 0 end) over (partition by min(sentBy, sentTo), max(sentBy, sentTo)) as num_unreads
      from t
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...