首页 > 解决方案 > Pl / SQL Oracle 帮助在子查询中运行日期

问题描述

如何通过子查询获取最大值的日期,我不能将日期放在主查询中,因为我必须将它添加到组中,因为它会给我带来很多数据

这是代码:

  SELECT MAX (A1.VALOR) AS VALOR,
         (SELECT sq1.FECHA
            FROM VARIABLE_VALORES_SMEC sq1
           WHERE sq1.ID_AGENTE = A1.ID_AGENTE)
            MES,                                  -- {<-- Here is the Problem}
         (SELECT CODIGO_AGENTE
            FROM AGENTES
           WHERE ID_AGENTE = A1.ID_AGENTE)
            Agentess,
         (SELECT NOMBRE_AGENTE
            FROM AGENTES
           WHERE ID_AGENTE = A1.ID_AGENTE)
            Nombre_Agente
    FROM VARIABLE_VALORES_SMEC A1
   WHERE     A1.VALOR < '1'
         AND A1.VALOR != '0'
         AND A1.ID_AGENTE IN (SELECT C1.ID_AGENTE
                                FROM VARIABLE_VALORES_SMEC C1
                               WHERE A1.FECHA = C1.FECHA)
         AND A1.ID_AGENTE IN (SELECT B1.ID_AGENTE
                                FROM AGENTES B1
                               WHERE ID_CATEGORIA_AGENTE = 'AC006')
         AND (A1.FECHA BETWEEN (ADD_MONTHS (TO_DATE ( :FECHAIN, 'MM/DD/YYYY'),
                                            -1))
                           AND (LAST_DAY (
                                   ADD_MONTHS (
                                      TO_DATE ( :FECHAIN, 'MM/DD/YYYY'),
                                      -1))))
         AND A1.ID_VARIABLE LIKE '%_calc_total_pot@%'
GROUP BY ID_AGENTE

标签: oracleplsql

解决方案


您可以使用row_number分析功能来获取value最高的记录并使用该fecha记录的。使用以下子查询:

(Select fecha from
      (SELECT sq1.FECHA, row_number() over (order by sq1.value desc nulls last) as rn
        FROM VARIABLE_VALORES_SMEC sq1
       WHERE sq1.ID_AGENTE = A1.ID_AGENTE)
Where rn = 1) MES

推荐阅读