从数据库中查找最小日期

ao218c7q  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(357)

我有以下问题:

SELECT
    IsTestBatch,
    BatchID,
    CampaignID,
    IF(ActualTriggerDateTime IS NOT NULL,
       MIN(ActualTriggerDateTime),
       MIN(TriggerDateTime)) AS NextQueuedOn
FROM
    campaignbatches
WHERE
    Status IN (2,3)
GROUP BY
    CampaignID
ORDER BY
    IF(ActualTriggerDateTime IS NOT NULL, ActualTriggerDateTime, TriggerDateTime) ASC

这个 if 情况不正常,最小日期也不正确。

我需要上面的记录,但它返回上一个图像表中的第一条记录:

83qze16e

83qze16e1#

所有选择列都将进入GROUPBY子句

SELECT IsTestBatch,BatchID,CampaignID,
 coalesce(MIN(ActualTriggerDateTime),MIN(TriggerDateTime)) AS NextQueuedOn 
 FROM campaignbatches
WHERE Status IN (2,3)
   and IsTestBatch=1 and BatchID=42 -- as you want single row
 GROUP BY IsTestBatch,BatchID,
   CampaignID 
ORDER BY NextQueuedOn ASC
toiithl6

toiithl62#

因为聚合函数 MIN() 忽略 NULL 值,则可以尝试从列actualtriggerdatetime中选择最小日期,如果此列上的所有值都为null,则可以从列triggerdatetime中选择最小值。

SELECT
    IsTestBatch,
    BatchID,
    CampaignID,
    IFNULL(MIN(ActualTriggerDateTime), MIN(TriggerDateTime)) AS NextQueuedOn
FROM
    campaignbatches
WHERE
    Status IN (2,3)
GROUP BY
    IsTestBatch, BatchID, CampaignID
ORDER BY
    NextQueuedOn ASC

相关问题