让我说我有这些价值观:
id info date
---------------------------------
1 hi 2014-02-15
2 something 2014-10-30
1 hi 2014-12-01
正如你所看到的,我有两个身份#1。如果我要求查询找到自3个月前以来未导出的任何内容(日期)。 #1仍将通过,即使它是在12月首次出口。只是因为它找到了2月15日导出的那个,然后它完成了查询,因为它实际上找到了匹配。
你如何这样做,以便查询遍历所有内容,以便考虑所有匹配?
我现在使用的查询(不是它会有很大的帮助):
//------SQL query för att se till att du inte tar ut samma lead igen-----\\
$sql = $pdo->query('SELECT p.* FROM prospects p
LEFT JOIN exported_leads e
on p.id = e.lead_id WHERE p.partner_id != '.$partner_id.' AND (e.lead_id IS NULL OR datediff(now(), e.export_date) > 90)
LIMIT '.$monthly_uttag.'');
//---------------------------------------------\\
答案 0 :(得分:0)
您可以像这样使用NOT IN
谓词:
SELECT *
FROM table1
WHERE id NOT IN(SELECT id
FROM table1
WHERE date < DATE_SUB(now(), INTERVAL 3 MONTH))
这将忽略id
1,因为它在过去2个月的间隔内有一个日期。
子查询将获取所有在过去3个月内具有日期值的ID,然后NOT IN
谓词将忽略这些值。
答案 1 :(得分:0)
不确定您的潜在客户表的布局,但您可以加入一个子查询以获取每个lead_id的最新export_date,然后检查WHERE子句中的那个: -
SELECT p.*
FROM prospects p
LEFT JOIN
(
SELECT lead_id, MAX(export_date)
FROM exported_leads
GROUP BY lead_id
)e
on p.id = e.lead_id
WHERE p.partner_id != '.$partner_id.'
AND (e.lead_id IS NULL OR datediff(now(), e.export_date) > 90)
LIMIT '.$monthly_uttag.'');
也可以使用普通连接执行此操作,并检入having子句。但阅读有点麻烦!您还应该指定要返回的潜在客户的GROUP BY中的所有字段
SELECT p.id, partner_id
FROM prospects p
LEFT JOIN exported_leads e
on p.id = e.lead_id
WHERE p.partner_id != '.$partner_id.'
GROUP BY p.id, partner_id
HAVING (e.lead_id IS NULL OR datediff(now(), MAX(e.export_date) > 90))
LIMIT '.$monthly_uttag.'');