1

我有两张表,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
4

2 回答 2

1

我的方法是使用相关子查询来获取inboxid,然后加入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;
于 2013-08-16T10:29:23.370 回答
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
于 2013-08-16T10:17:40.993 回答