我有两个表,1。(收件箱)保持发送报告,2。(发件箱)保持发送短信。我无法添加外键,并更改日期库结构。
id number smsdate
-- ---------- -------------------
1 600600600 2013-08-16 11:51:18
2 700600600 2013-08-16 11:51:16
3 600600600 2013-08-16 11:51:14
4 900600600 2013-08-16 11:51:12
id number processed_date
--- ---------- -------------------
167 600600600 2013-08-16 10:51:10
288 700600600 2013-08-16 09:51:10
356 600600600 2013-08-16 08:51:10
473 900600600 2013-08-16 07:51:10
536 600600600 2013-08-16 06:51:10
我现在加入已发送邮件的报告。我可以这样做,比较表发件箱的发送次数和日期,使用相同的号码和最近的收件箱收件箱。我确信报告将按顺序进行。
如果我使用
SELECT outbox.id, inbox.id, outbox.number, inbox.number,
outbox.processed_date, inbox.smsdate FROM outbox
LEFT JOIN inbox ON inbox.number= outbox.number
AND inbox.smsdate >= outbox.processed_date
GROUP BY outbox.id
ORDER BY outbox.id DESC;
我得到了奇怪的结果,报告重复了。如果我有3个发送,2个接收,对于相同的号码,它应该是一个空的。而不是后者的空白,它复制了我以前的空白。
我试图添加。
GROUP BY outbox.id, inbox.id
但情况更糟。
这是解决这个问题的方法吗?
期望的输出:
outbox.id inbox.id
--------- ----------
167 NULL
288 2
356 1
473 4
536 3
答案 0 :(得分:1)
我的方法是使用相关子查询来获取inbox
id,然后联接回inbox
表以提取所需的列:
select o.id, iid, o.number, i.number, o.processed_date, i.smsdate
from (select o.*,
(select i.id
from inbox i
where i.number = o.number and
i.smsdate >= o.processed_date
order by i.sms.date
limit 1
) iid
from outbox o
) o left outer join
inbox i
on o.iid = i.id
ORDER BY outbox.id DESC;
答案 1 :(得分:0)
试试这个::
SELECT outbox.id, inbox.id, outbox.number, inbox.number,
outbox.processed_date, inbox.smsdate FROM outbox
LEFT JOIN inbox ON inbox.number= outbox.number
WHERE inbox.smsdate >= outbox.processed_date