mysql - 从每个帐户的 JOIN 中选择具有 MIN DATETIME 值的 1 行

标签 mysql sql

我需要选择最后拨号列中日期时间值最早的行

未调用条目的默认 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 获取一个具有 MIN LastDialed DATETIME 值的条目

最佳答案

我认为这符合你的要求:

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() 将放回默认值。

关于mysql - 从每个帐户的 JOIN 中选择具有 MIN DATETIME 值的 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498735/

相关文章:

MySQL 保留最新日期的记录

mysql - 如何查看mysql中的空表结构?

mysql - sql中的数据透视困难

java - 一次执行多个 native 查询

mysql - 如何在 MySQL 中将时间戳日期与仅日期参数进行比较?

mysql - 处理 phpMyAdmin 的用户

sql - IF block 在条件不适用时执行

mysql - 查找订单 mysql 中所有商品的总和

SQL:获取从左连接返回的行数

mysql - 一对多关系中有多少行?