SQL запрос возвращает все записи, в которых хотя бы один столбец соответствует подгруппе в той же таблице - PullRequest
0 голосов
/ 17 июня 2020

У меня есть таблица messages в postgresql, где каждая запись представляет собой сообщение с полями: id, session_creation_time, customer_id, message Сначала мне нужно сгруппировать сообщения в пары session_creation_time и customer_id, чтобы я мог выяснить, какие сообщения где часть того же сеанса разговора, чтобы я мог сделать что-то вроде:

SELECT * 
FROM messages 
GROUP BY session_creation_time, customer_id, id 
ORDER BY session_creation_time

И после этого мне нужно вернуть все сообщения, сгруппированные по session_creation_time и customer_id, в которых хотя бы одно из этих сообщений соответствует моему оператору message ilike "%myString%"

Есть идеи?

образец данных

-----------------------------------------------------------------------
id  |session_creation_time| customer_id | msg_to | msg_from | message |    
----|---------------------|-------------|--------|----------|---------|
1   | 2019-10-22 14:43:04 | a           |   a    |   me     | hello   |
----|---------------------|-------------|--------|----------|---------|
2   | 2019-10-22 14:43:04 | a           |   me   |   a      | hi      |
----|---------------------|-------------|--------|----------|---------|
3   | 2019-10-21 14:43:04 | b           |   me   |   b      |ru there?|
----|---------------------|-------------|--------|----------|---------|
4   | 2019-10-21 14:43:04 | b           |   b    |  me      |   yes   |
----|---------------------|-------------|--------|----------|---------|
5   | 2019-10-21 14:43:04 | b           |   me   |   b      | help pls|
----|---------------------|-------------|--------|----------|---------|
6   | 2019-10-21 14:43:04 | b           |   b    |  me      |I'll help|
----|---------------------|-------------|--------|----------|---------|
7   | 2019-10-25 14:43:04 | b           |   me   |   b      |hi its'me|
----|---------------------|-------------|--------|----------|---------|
8   | 2019-10-25 14:43:04 | b           |   b    |  me      |welcome  |
----|---------------------|-------------|--------|----------|---------|

ожидаемый результат

Если мой оператор message ilike '%help%' Мой запрос должен возвращать сообщения с идентификаторами: 3,4,5,6, поскольку это сообщения от той же пары session_creation_time`` and customer_id where at least one of the messages has the string help '' на нем. а остальные сообщения игнорируйте

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Попробуйте что-нибудь в этом роде:

SELECT m.session_creation_time, m.customer_id, m.message
FROM messages AS m
INNER JOIN messages AS m_
ON m.session_creation_time = m_.session_creation_time
AND m.customer_id = m_.customer_id
WHERE m_.message ilike "%myString%"
0 голосов
/ 17 июня 2020

Вам нужно будет указать столбцы, для которых вам нужны результаты группы, а затем включить условие для фильтрации строк, например:

SELECT COUNT (customer_id), customer_id, session_creation_time FROM messages WHERE message LIKE '% somestring%' ГРУППА ПО времени создания_сессии, идентификатор_клиента ЗАКАЗАТЬ время создания_сессии

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