从每个帐户的JOIN中选择1个行的MIN DATETIME值

时间:2019-06-07 17:17:55

标签: mysql sql

我需要在lastdialed列中选择日期时间值最旧的行

尚未拨打的条目的默认DATETIME是0001-01-01 00:00:00

当前,如果存在未拨入的帐户和已拨入的帐户,它将选择已拨入的最早条目。

我已经在单个帐户上运行了SELECT MIN(p.lastdialed)以验证0001-01-01 00:00:00是最小值

应该抓住绿色的条目,当前抓住的是黄色

我尝试使用HAVING子句和子查询无用

    SELECT 
    d.id,
    p.lastdialed

FROM dbase d
    JOIN phonenumbers p
    ON d.id = p.maindatabaseid

WHERE d.statusname IN ('X'
AND phonestatus NOT IN ('Y')
AND p.lastdialed = (SELECT MIN(p.lastdialed) FROM phonenumbers s WHERE s.maindatabaseid = d.id)


GROUP BY d.id
ORDER BY RAND();

预期的结果是,每个ID都具有一个具有最后上拨的MINATEDATETIME值的条目

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的要求

WHERE d.statusname IN ('X') AND
     phonestatus NOT IN ('Y') AND
     p.lastdialed = (SELECT COALESCE(MIN(s.lastdialed), '0001-01-01 00:00:00')
                     FROM phonenumbers s 
                     WHERE s.maindatabaseid = d.id AND
                           s.lastdialed <> '0001-01-01 00:00:00'
                   );

子查询为外部查询中的每个组计算lastdialed的最小值。

计算将查看没有默认值的匹配电话号码记录,并取其中的最小值。如果不存在,则COALESCE()将默认值放回去。