¿Como sacar el máximo y fecha SQL Oracle?

publicado por: Anonymous

¿Cómo puedo añadir la fecha con el máximo?

Tengo la siguiente consulta:

SELECT MAX (TOTAL_DL_UL_GBPS) AS maximo_troughput
FROM (  SELECT FECHA_MUESTRA DIA,
       LABEL,
       DL_OUT_TH_KBPS,
       ROUND ( (DL_OUT_TH_KBPS + UL_INC_TH_KBPS) / (1000 * 1000), 2)
          TOTAL_DL_UL_GBPS
      FROM V_GF_DATA_GW_TH_KBPS
             WHERE TRUNC(FECHA_MUESTRA) >= TO_DATE ('29-10-2018','DD-MM-YYYY')
                    AND TRUNC(FECHA_MUESTRA) <= TO_DATE ('05-11-2018', 'DD-MM-YYYY')
      ORDER BY FECHA_MUESTRA ASC, label ASC)

El resultado al que quiero llegar es el siguiente:

introducir la descripción de la imagen aquí

Agregar la columna de la fecha en que se hizo el máximo.

solución

Si tienes una versión moderna de Oracle, puedes traer un único registro con código SQL estándar. Sería algo como:

select *
  from (
        SELECT   FECHA_MUESTRA DIA
               , LABEL
               , DL_OUT_TH_KBPS
               , ROUND ( (DL_OUT_TH_KBPS + UL_INC_TH_KBPS) / (1000 * 1000), 2) TOTAL_DL_UL_GBPS
          FROM V_GF_DATA_GW_TH_KBPS
         WHERE TRUNC (FECHA_MUESTRA) = TO_DATE ('05-11-2018', 'DD-MM-YYYY')
       ) q1
 order by TOTAL_DL_UL_GBPS
 fetch first 1 row only

Y tendrás no solo la fecha, sino todos los campos para dicho registro (si hay varios que tienen el mismo valor máximo, tendrás uno de ellos (aleatorio). Puedes influenciar cual (por ejemplo la fecha mínima o máxima) agregando más columnas a la clausula order by.

Si no tienes un oracle moderno, puedes calcular un número de fila en el orden específico que te interesa en la sub consulta y luego quedarte con la fila número 1 para lograrlo, pero este código es más específico de Oracle y está totalmente fuera del estándar.

select *
  from (
        SELECT   FECHA_MUESTRA DIA
               , LABEL
               , DL_OUT_TH_KBPS
               , ROUND ( (DL_OUT_TH_KBPS + UL_INC_TH_KBPS) / (1000 * 1000), 2) TOTAL_DL_UL_GBPS
               , row_number() over (order by ROUND ( (DL_OUT_TH_KBPS + UL_INC_TH_KBPS) / (1000 * 1000), 2) desc) as rn
          FROM V_GF_DATA_GW_TH_KBPS
         WHERE TRUNC (FECHA_MUESTRA) = TO_DATE ('05-11-2018', 'DD-MM-YYYY')
       ) q1
 where rn = 1
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *