Oracle Query для сравнения дат из двух разных таблиц - PullRequest
1 голос
/ 24 марта 2019

У меня есть две таблицы ниже. Один хранит данные, полученные для актива, а другой - когда связывается представитель клиента.

Asset_Data_Historical

+---------+------------------+
| AssetID | Data_Received_On |
+---------+------------------+
|   17085 | 8/23/2017 22:50  |
|   17085 | 8/25/2017 20:54  |
|   17085 | 8/25/2017 21:08  |
|   17085 | 8/31/2017 18:49  |
|   17085 | 9/29/2017 18:51  |
+---------+------------------+

Customer_Contacted_Logs

+----------+----------+-------------------+
| TicketID | Asset_ID | Last_Contacted_On |
+----------+----------+-------------------+
|  1785487 |    17085 | 9/28/2017 21:57   |
|  1785491 |    17085 | 10/16/2017 18:51  |
+----------+----------+-------------------+

Моя проблема: Мне нужно найти данные из Customer_Contacted_Logs на основе таблицы Asset_data_Historical.

Например: для AssetID 17085, первые данные, полученные 23.08.2017, 22:50. Теперь запрос должен искать в Customer_Contacted_Logs данные «Last_Contacted_on», равные больше, но не больше, чем следующие полученные данные.

Итак, в этой ситуации Первые данные получены 23.08.2017 в 22:50, и они будут искать данные в Customer_contacted_log и находят дату 28.09.2017 21:57, и эта же дата будет заполнить, так как дата в контакте не превышает Data_Received_on. В следующем случае он извлечет дату 16.10.2017 18: 51.

Вот пример, как я хотел бы получить запрос.

+---------+------------------+-------------------+
| AssetID | Data_Received_On | Last_Contacted_On |
+---------+------------------+-------------------+
|   17085 | 8/23/2017 22:50  | 9/28/2017 21:57   |
|   17085 | 8/25/2017 20:54  | 9/28/2017 21:57   |
|   17085 | 8/25/2017 21:08  | 9/28/2017 21:57   |
|   17085 | 8/31/2017 18:49  | 9/28/2017 21:57   |
|   17085 | 9/29/2017 18:51  | 10/16/2017 18:51  |
+---------+------------------+-------------------+

Пожалуйста, дайте мне знать, если возникнут вопросы.

Заранее спасибо.

1 Ответ

1 голос
/ 24 марта 2019

Вы можете использовать correlated subquery

with Asset_Data_Historical(AssetID, Data_Received_On) as
(
  select 17085, timestamp'2017-08-23 22:50:00' from dual union all
  select 17085, timestamp'2017-08-25 20:54:00' from dual union all 
  select 17085, timestamp'2017-08-25 21:08:00' from dual union all 
  select 17085, timestamp'2017-08-31 18:49:00' from dual union all  
  select 17085, timestamp'2017-09-29 18:51:00' from dual    
), Customer_Contacted_Logs(TicketID, Asset_ID, Last_Contacted_On ) as
(
  select 1785487,17085, timestamp'2017-09-28 21:57:00' from dual union all
  select 1785491,17085, timestamp'2017-10-16 18:51:00' from dual
)
select a.*, 
      ( select min(c.Last_Contacted_On)
          from Customer_Contacted_Logs c 
         where a.AssetID = c.Asset_ID
           and a.Data_Received_On < c.Last_Contacted_On )
       as Last_Contacted_On
  from Asset_Data_Historical a;


ASSETID   DATA_RECEIVED_ON      LAST_CONTACTED_ON
17085     23.08.2017 22:50:00   28.09.2017 21:57:00
17085     25.08.2017 20:54:00   28.09.2017 21:57:00
17085     25.08.2017 21:08:00   28.09.2017 21:57:00
17085     31.08.2017 18:49:00   28.09.2017 21:57:00
17085     29.09.2017 18:51:00   16.10.2017 18:51:00

Демо

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