DB2 -返回Select中的最小日期时间

kgqe7b3p  于 2023-10-18  发布在  DB2
关注(0)|答案(2)|浏览(206)

我在BD 2中有以下SQL语句,它返回下表

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  = '[email protected]' 
AND c.SUBJECT  = 'ALERTA - SLA estourado'
AND c.ID  = '4355070'

enter image description here
但是,我只需要找到的最小日期和时间,在屏幕上以黄色突出显示
我过滤掉了c.ID = '4355070'仅用于测试。
我有几个ID,有N行,想法是把每个ID的最小日期/时间值
我已经尝试过使用GROUP BY,但是“To”列具有不同的值
我需要获得第一个警报发出的第一个日期/时间以及它被发送给的“收件人”
谢谢

9nvpjoqh

9nvpjoqh1#

对于同一个(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    , '[email protected]', '11', 'ALERTA - SLA estourado')
    , (10, CURRENT TIMESTAMP    , '[email protected]', '12', 'ALERTA - SLA estourado')
    , (10, CURRENT TIMESTAMP + 1, '[email protected]', '13', 'ALERTA - SLA estourado')

    , (20, CURRENT TIMESTAMP    , '[email protected]', '21', 'ALERTA - SLA estourado')
    , (20, CURRENT TIMESTAMP    , '[email protected]', '22', 'ALERTA - SLA estourado')
    , (20, CURRENT TIMESTAMP + 1, '[email protected]', '23', 'ALERTA - SLA estourado')
  ) c (ID, CREATEDATE, SENDFROM, SENDTO, SUBJECT)
  WHERE c.SENDFROM  = '[email protected]' 
  AND c.SUBJECT  = 'ALERTA - SLA estourado'
) c
WHERE RN_ = 1

| 达塔伊霍拉-杜阿莱尔塔|Enviado Por|帕拉|阿孙托|
| --|--|--|--|
| 2023-09-25-10.51.23.804000 | email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)| 11 |ALERTA - SLA estourado|
| 2023-09-25-10.51.23.804000 | email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)| 21 |ALERTA - SLA estourado|

aelbi1ox

aelbi1ox2#

您可以使用子查询,但如果每个ID都具有相同的最小日期,则可能会返回多个条目:

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.CREATEDATE = 
   (SELECT MIN(c2.CREATEDATE) FROM M.LOG c2 WHERE c2.ID = c.ID);

小组还是你的朋友。您可能需要更改SELECT中的哪些列具有聚合函数,例如:MAX(),MIN(),MAX().

SELECT MIN(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
GROUP BY c.ID
ORDER BY MIN(c.CREATEDATE);

您可能需要慢慢添加列并进行故障排除。

SELECT c.ID, MIN(c.CREATEDATE)
FROM M.LOG c
GROUP BY c.ID
ORDER BY MIN(c.CREATEDATE) DESC;

相关问题