检索具有最大值的行中的所有值

时间:2019-08-09 13:24:40

标签: mysql group-by max

我有一个看起来像这样的表:

enter image description here

对于每个公司,都有多个NATURAL_PERSON_ID,每个NATURAL_PERSON都有进行审计的日期FECHA_DE_REPORTE,而作为公司,则有向该公司提供第一笔贷款的日期。

我想要为每个NATURAL_PERSON选择其FECHA_DE_REPORTE小于或等于FIRST_LOAN(为该公司提供第一笔贷款的日期)的所有FOLIO_CONSULTA,然后我需要在每个组中找到最大日期并保持满足所有这些条件的值的信息(整行),以及每个NATURAL_PERSON的所有信息

因此,在此示例中,我期望的结果是第二行的所有信息,因为这是COMPANY AND NATURAL_PERSON的FECHA_DE_REPORTE的MAX()。

我尝试过:

SELECT NPC.COMPANY_ID
      ,NPC.NATURAL_PERSON_ID
      ,NPS.DIGITAL_SIGNATURE_ID
      ,CDC.FOLIO_CONSULTA
      ,CDC.FECHA_DE_REPORTE
      ,FIRST_LOAN.FIRST_LOAN
      ,MAX(CDC.FECHA_DE_REPORTE)  MAX_FOLIO_CONSUTA
    FROM KONFIO.NATURAL_PERSON_COMPANY NPC
    LEFT JOIN KONFIO.NATURAL_PERSON_SIGNATURE NPS ON NPS.NATURAL_PERSON_ID = NPC.NATURAL_PERSON_ID
    JOIN KONFIO.CDC_RESPONSE CDC ON CDC.DIGITAL_SIGNATURE_ID= NPS.DIGITAL_SIGNATURE_ID
    JOIN
    (
    SELECT CAPP.COMPANY_ID
      ,MIN(LOAN.DOCUMENTATION_DATE) FIRST_LOAN
    FROM KONFIO.COMPANY_APPLICATION CAPP
    JOIN KONFIO.LOAN ON LOAN.APPLICATION_ID = CAPP.APPLICATION_ID
    GROUP BY CAPP.COMPANY_ID) FIRST_LOAN ON FIRST_LOAN.COMPANY_ID = NPC.COMPANY_ID
    WHERE CDC.FECHA_DE_REPORTE <= FIRST_LOAN.FIRST_LOAN
    AND NPC.COMPANY_ID IN (1033) 
    GROUP BY NPC.COMPANY_ID, NPC.NATURAL_PERSON_ID

但它会检索找到的第一个值,因此FOLIO_CONSULTA不对应于MAX()FECHA_DE_REPORTE的FOLIO_CONSULTA

enter image description here

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

您应该在表CDC_RESPONSE上加入MAX(FECHA_DE_REPORTE)的子查询

    SELECT NPC.COMPANY_ID
      ,NPC.NATURAL_PERSON_ID
      ,NPS.DIGITAL_SIGNATURE_ID
      ,CDC.FOLIO_CONSULTA
      ,CDC.FECHA_DE_REPORTE
      ,FIRST_LOAN.FIRST_LOAN
      ,T.MAX_FOLIO_CONSUTA
    FROM KONFIO.NATURAL_PERSON_COMPANY NPC
    INNER JOIN  (
        SELECT DIGITAL_SIGNATURE_ID
             , MAX(FECHA_DE_REPORTE)  MAX_FOLIO_CONSUTA
        FROM KONFIO.CDC_RESPONSE
        GROUP BY DIGITAL_SIGNATURE_ID
    ) T ON T.DIGITAL_SIGNATURE_ID = NPS.DIGITAL_SIGNATURE_ID 
        AND T.MAX_FOLIO_CONSUTA = CDC.FECHA_DE_REPORTE
    LEFT JOIN KONFIO.NATURAL_PERSON_SIGNATURE NPS ON NPS.NATURAL_PERSON_ID = NPC.NATURAL_PERSON_ID
    JOIN KONFIO.CDC_RESPONSE CDC ON CDC.DIGITAL_SIGNATURE_ID= NPS.DIGITAL_SIGNATURE_ID
    JOIN
    (
    SELECT CAPP.COMPANY_ID
      ,MIN(LOAN.DOCUMENTATION_DATE) FIRST_LOAN
    FROM KONFIO.COMPANY_APPLICATION CAPP
    JOIN KONFIO.LOAN ON LOAN.APPLICATION_ID = CAPP.APPLICATION_ID
    GROUP BY CAPP.COMPANY_ID) FIRST_LOAN ON FIRST_LOAN.COMPANY_ID = NPC.COMPANY_ID
    WHERE CDC.FECHA_DE_REPORTE <= FIRST_LOAN.FIRST_LOAN
    AND NPC.COMPANY_ID IN (1033) 
    GROUP BY NPC.COMPANY_ID, NPC.NATURAL_PERSON_ID
    ...... missing part
相关问题