我需要选择最后拨号列中日期时间值最早的行
未调用条目的默认 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/