Как рассматривать как все данные строки, которые одинаковы в запросе оракула? - PullRequest
0 голосов
/ 16 января 2019

У меня есть система, в которой мне нужно получить все сообщения, которые хранятся в шлюзе SMS с именем tg800.

Я разрабатываю это с помощью Spring MVC, запущенного в tomcat.

Я храню все полученные сообщения в таблице с именем

SMS_MESSAGES

CREATE TABLE CWMS_USER.SMS_MESSAGES
(
  MESSAGE_ID             VARCHAR2(4000 CHAR),
  SENDER                 VARCHAR2(4000 CHAR),
  SMSC                   VARCHAR2(13 CHAR),
  PORT_ID                VARCHAR2(1 CHAR),
  CONTENT                VARCHAR2(4000 CHAR),
  RECEIVE_TIME           VARCHAR2(30 CHAR),
  HAS_READ               VARCHAR2(3 CHAR),
  IS_ASSIGNED_TO_TICKET  VARCHAR2(50 CHAR),
  ID                     NUMBER                 NOT NULL,
  MESSAGE_STATUS         VARCHAR2(20 CHAR),
  TYPE_OF_MESSAGE        VARCHAR2(20 CHAR)      NOT NULL
 ) 

Я храню все отправленные сообщения в таблице с именем

SMS_REPLY

CREATE TABLE CWMS_USER.SMS_REPLY
(
  MESSAGE_ID             VARCHAR2(4000 CHAR),
  SENDER                 VARCHAR2(4000 CHAR),
  SMSC                   VARCHAR2(13 CHAR),
  PORT_ID                VARCHAR2(1 CHAR),
  CONTENT                VARCHAR2(4000 CHAR),
  RECEIVE_TIME           VARCHAR2(30 CHAR),
  HAS_READ               VARCHAR2(3 CHAR),
  IS_ASSIGNED_TO_TICKET  VARCHAR2(50 CHAR),
  ID                     NUMBER                 NOT NULL,
  MESSAGE_STATUS         VARCHAR2(20 CHAR),
  TYPE_OF_MESSAGE        VARCHAR2(20 CHAR)      NOT NULL
)

Когда вы откроете приложение для обмена сообщениями, вы увидите номер, последнее сообщение, дату получения и многое другое. Упорядочено по дате и сгруппировано по номеру. Вот что мне нужно увидеть.

У меня проблема в том, что TG800 хранит числа по-разному.

пример: в SMS_MESSAGES номер + 639183478372

в SMS_REPLY номер 639183478372

Запрос не рассматривает эти два числа как одно, поскольку число в SMS_MESSAGES имеет знак плюс.

У меня нет контроля над тем, как TG800 хранит номер.

Есть ли способ трактовать это как единое целое?

SELECT * FROM((SELECT * FROM SMS_MESSAGES
    LEFT JOIN
    (SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
    ON SMS_MESSAGES.SENDER = foo.CONTACT_NO)
    UNION
    (SELECT * FROM SMS_REPLY
    LEFT JOIN
    (SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
    ON SMS_REPLY.SENDER = foo.CONTACT_NO)) WHERE (SENDER, RECEIVE_TIME) 
            IN (SELECT SENDER, MAX(RECEIVE_TIME) FROM ((SELECT * FROM SMS_MESSAGES
    LEFT JOIN
    (SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
    ON SMS_MESSAGES.SENDER = foo.CONTACT_NO)
    UNION
    (SELECT * FROM SMS_REPLY
    LEFT JOIN
    (SELECT CONTACT_NAME, CONTACT_NO FROM SMS_CONTACTS) foo
    ON SMS_REPLY.SENDER = foo.CONTACT_NO)) GROUP BY SENDER,PORT_ID) ORDER BY RECEIVE_TIME desc

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

Мне нужно сделать это как единое целое, потому что это одно и то же число. Пожалуйста, помогите мне, пожалуйста.

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