es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Agrupar por fecha, pero no incluir la hora – Oracle SQL

Estoy tratando de utilizar listagg para agrupar categorías por fecha, pero el campo es de fecha-hora. Las categorías están apareciendo en líneas separadas. ¿Es posible agrupar solo por fecha? He intentado usar CAST y DATE en el grupo por, pero aún no funciona. Aquí está la consulta base:

select ACCOUNT,
       ID,
       NAME,
       TERM,
       listagg(CATEGORY, ', ') within group (order by CATEGORY) as cat_by_date,
       trunc(TRANSACTION_DATE) short_date   

  from TABLE
 where term = '2022'
       and CATEGORY in ('T', 'H', 'P')

 group by
       ACCOUNT,
       ID,
       NAME,
       TERM,
       trunc(TRANSACTION_DATE)

 order by 1
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible agrupar solo por fecha. En lugar de agrupar por TRANSACTION_DATE, utiliza trunc(TRANSACTION_DATE) en la cláusula group by. Esto truncará el campo de fecha y hora a solo la fecha, lo que te permitirá agrupar solo por fecha.

    Aquí está la consulta modificada:

    select ACCOUNT,
           ID,
           NAME,
           TERM,
           listagg(CATEGORY, ', ') within group (order by CATEGORY) as cat_by_date,
           trunc(TRANSACTION_DATE) as short_date   
    
      from TABLE
     where term= '2022'
           and CATEGORY in ('T', 'H', 'P')
    
     group by
           ACCOUNT_UID,
           ID,
           NAME,
           TERM,
           trunc(TRANSACTION_DATE)
    
     order by 1
    

    Observa que el alias short_date es opcional, pero puede ser útil para mejorar la legibilidad.

Comments are closed.