Search code examples
sqldb2

DB2 - Return the smallest datetime within the Select


I have the following SQL statement in BD2 that returns the table below

SELECT
c.CREATEDATE AS "Data e Hora do Alerta"
,c.SENDFROM  AS "Enviado Por"   
,c.SENDTO AS "Para"
,c.SUBJECT AS "Assunto"
FROM  M.LOG c
WHERE c.SENDFROM  = 'alerta@vomcoo.com' 
AND c.SUBJECT  = 'ALERTA - SLA estourado'
AND c.ID  = '4355070'

enter image description here

However, I only need the smallest date and time found, highlighted in yellow in the printout

I filtered out the c.ID = '4355070' for testing only.

I have several IDs that have N lines, the idea would be to bring the smallest date/time value of each ID

I've already tried using GROUP BY , but the "To" column has different values

I need to get the first date/time of the first alert issued and "To" who it was sent to

Thanks


Solution

  • Returns only one (arbitrary) row for the same (ID, CREATEDATE).

    SELECT
      c.CREATEDATE AS "Data e Hora do Alerta"
    , c.SENDFROM  AS "Enviado Por"   
    , c.SENDTO AS "Para"
    , c.SUBJECT AS "Assunto"
    FROM
    (
      -- Your original SELECT statement emulation
      SELECT 
        *
      , ROW_NUMBER () OVER (PARTITION BY ID ORDER BY CREATEDATE) AS RN_
      FROM 
      (
        VALUES
          (10, CURRENT TIMESTAMP    , 'alerta@vomcoo.com', '11', 'ALERTA - SLA estourado')
        , (10, CURRENT TIMESTAMP    , 'alerta@vomcoo.com', '12', 'ALERTA - SLA estourado')
        , (10, CURRENT TIMESTAMP + 1, 'alerta@vomcoo.com', '13', 'ALERTA - SLA estourado')
    
        , (20, CURRENT TIMESTAMP    , 'alerta@vomcoo.com', '21', 'ALERTA - SLA estourado')
        , (20, CURRENT TIMESTAMP    , 'alerta@vomcoo.com', '22', 'ALERTA - SLA estourado')
        , (20, CURRENT TIMESTAMP + 1, 'alerta@vomcoo.com', '23', 'ALERTA - SLA estourado')
      ) c (ID, CREATEDATE, SENDFROM, SENDTO, SUBJECT)
      WHERE c.SENDFROM  = 'alerta@vomcoo.com' 
      AND c.SUBJECT  = 'ALERTA - SLA estourado'
    ) c
    WHERE RN_ = 1
    
    Data e Hora do Alerta Enviado Por Para Assunto
    2023-09-25-10.51.23.804000 alerta@vomcoo.com 11 ALERTA - SLA estourado
    2023-09-25-10.51.23.804000 alerta@vomcoo.com 21 ALERTA - SLA estourado