我需要在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值的条目
答案 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()
将默认值放回去。