我有一个尝试检索人员ID的查询,但前提是这些人员有多个地址。我也在检查我上次打电话给他们的时间是至少30天前。最后,我正在尝试订购结果,因为我想用最早的last_called日期时间来提取结果:
SELECT
p.id,
COUNT(*) AS cnt
FROM
people p
LEFT JOIN addresses a
ON p.id = a.id
WHERE p.last_called <= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY p.id
HAVING COUNT(*) > 1
ORDER BY p.last_called ASC
LIMIT 25
目前,结果并不排除只有一个地址的人。我甚至没有达到我知道排序顺序是否正确的程度,但是现在我只想知道为什么我的查询没有提取结果,其中至少有2个地址用于人
答案 0 :(得分:0)
如果您不想包含没有地址的人,那么我建议您使用INNER JOIN
代替LEFT JOIN
和DISTINCT
来获取不同的地址ID
(以防万一你有重复的映射),例如:
SELECT
p.id,
COUNT(DISTINCT(a.id)) AS cnt
FROM
people p
JOIN addresses a
ON p.id= a.peopleid
WHERE p.last_called <= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY p.id
HAVING COUNT(DISTINCT(a.id)) > 1
就Ordering
而言,MySQL在排序结果之前评估GROUP BY
,因此,您需要将查询包装在另一个查询中以获取有序结果。
<强>更新强>
您需要加入peopleId
地址记录,而不是加入援助,才能获得人员记录。