【问题标题】:Get max date from another table based on date of current row根据当前行的日期从另一个表中获取最大日期
【发布时间】:2018-11-30 10:40:42
【问题描述】:

我有两张桌子,CALL_DATAMASTER_DATA

主数据有一个客户的日常数据,CALL_DATA 有一些客户的电话以及其他一些数据。 我想为每个客户和他在MASTER_DATA 中的每一行获取最近日期(到现在为止的最大日期)从CALL_DATA 开始的行。

我想出了这个:

SELECT MAX(CALL_DATA.CALL_DATE) OVER (PARTITION BY MASTER_DATA.CUSTOMER_ID 
                                          ORDER BY MASTER_DATA.DAILY_START_DATE)
        AS max_date_agg
     , MASTER_DATA.*
     , CALL_DATA.*
  FROM MASTER_DATA, CALL_DATA
 WHERE CALL_DATA.CALL_DAT <= MASTER_DATA.DAILY_START_DATE 
   AND CALL_DATA.CUSTOMER_ID = MASTER_DATA.CUSTOMER_ID;

但这让我在每天的开始日期都有不止一个现场直播。 事实上,它返回的行数与CALL_DATA 表中的行数一样多,直到MASTER_DATA 中的DAILY_START_DATE

例子:

   MAX_DATE_AGG             CUSTOMER_ID  DAILY_START_DATE
24/10/17 00:00:00,000000000 100664970   24/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   25/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   26/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   27/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   28/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   29/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   30/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   31/10/17 00:00:00
24/10/17 00:00:00,000000000 100664970   01/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   02/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   03/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   04/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   05/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   06/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   07/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   08/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   09/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   10/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   11/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   12/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   13/11/17 00:00:00
24/10/17 00:00:00,000000000 100664970   14/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   15/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   15/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   16/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   16/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   17/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   17/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   18/11/17 00:00:00
15/11/17 00:00:00,000000000 100664970   18/11/17 00:00:00

【问题讨论】:

    标签: sql oracle datetime


    【解决方案1】:

    您可以将您的查询转换为相关子查询:

    SELECT MASTER_DATA.*, (
        SELECT MAX(CALL_DATE)
        FROM CALL_DATA
        WHERE CALL_DATA.CUSTOMER_ID = MASTER_DATA.CUSTOMER_ID
        AND CALL_DATA.CALL_DAT <= MASTER_DATA.DAILY_START_DATE
    ) AS MOST_RECENT_CALL_TILL_NOW
    FROM MASTER_DATA
    

    【讨论】:

      【解决方案2】:

      这个查询应该返回你想要的

      SELECT T.*
        FROM (
                SELECT RANK() OVER (PARTITION BY MASTER_DATA.CUSTOMER_ID, MASTER_DATA.DAILY_START_DATE ORDER BY CALL_DATA.CALL_DATE DESC) AS myrank,
                      MASTER_DATA.CUSTOMER_ID,
                      MASTER_DATA.DAILY_START_DATE,
                      CALL_DATA.CALL_DATE
                 FROM MASTER_DATA,
                      CALL_DATA
                WHERE CALL_DATA.CALL_DATE   <= MASTER_DATA.DAILY_START_DATE 
                  AND CALL_DATA.CUSTOMER_ID = MASTER_DATA.CUSTOMER_ID
             ) T
       WHERE myrank = 1  
        ;
      

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 1970-01-01
        • 2022-11-17
        • 2021-11-15
        • 1970-01-01
        • 2021-03-16
        • 1970-01-01
        • 2020-02-05
        • 1970-01-01
        相关资源
        最近更新 更多