简体   繁体   English

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

[英]Retrieve all the values that are in the the row with the max value

I have a table that looks like this: 我有一个看起来像这样的表:

在此处输入图片说明

For each COMPANY there are multiple NATURAL_PERSON_ID, every NATURAL_PERSON have a date in which an audit was performed FECHA_DE_REPORTE and as a company there is a date in which the first loan was give to that company. 对于每个公司,都有多个NATURAL_PERSON_ID,每个NATURAL_PERSON都有进行审计的日期FECHA_DE_REPORTE,而作为公司,则有向该公司提供第一笔贷款的日期。

What I want is to select for each NATURAL_PERSON all the FOLIO_CONSULTA whose FECHA_DE_REPORTE is less or equal to FIRST_LOAN (the date in which the first loan was given for that company) Then I need to find the MAX date among each group and keep al the information (the whole row) for the value that fulfills all these conditions, and all this for each NATURAL_PERSON 我想要为每个NATURAL_PERSON选择FECHA_DE_REPORTE小于或等于FIRST_LOAN(为该公司提供第一笔贷款的日期)的所有FOLIO_CONSULTA,然后我需要在每个组中找到最长时间,并保留所有信息(整行)表示满足所有这些条件的值,以及每个NATURAL_PERSON的所有值

So for this example the result I expected is all the information of the second row since this is the MAX() of FECHA_DE_REPORTE by COMPANY AND NATURAL_PERSON. 因此,对于此示例,我期望的结果是第二行的所有信息,因为这是COMPANY AND NATURAL_PERSON的FECHA_DE_REPORTE的MAX()。

I have tried: 我努力了:

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

but it retrieves the first value that finds so the FOLIO_CONSULTA does not correspond to the FOLIO_CONSULTA of the MAX() FECHA_DE_REPORTE 但它检索找到的第一个值,因此FOLIO_CONSULTA与MAX()FECHA_DE_REPORTE的FOLIO_CONSULTA不对应

在此处输入图片说明

Any help would be appreciated 任何帮助,将不胜感激

You should join the subquery for MAX(FECHA_DE_REPORTE) on table CDC_RESPONSE 您应该在表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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM