2016-07-28 84 views
0

我有两个表accountscallsAccount表包含帐户详细信息和call表包含呼叫详细信息,如date_modified和其他帐户ID在parent_id列。从两个表连接中获取每个记录的最后修改值?

有很多的记录,我需要一个查询,获取所有的帐户与他们的最后通话细节(最近的电话)。

我已经试过这个,但不能得到结果。

SELECT accounts.id, accounts.name, calls.name subject 
FROM accounts 
INNER JOIN calls ON accounts.id = calls.parent_id 
WHERE accounts.id=(
    SELECT c.parent_id 
    FROM calls c 
    WHERE c.parent_id = calls.parent_id 
    ORDER BY c.date_modified DESC LIMIT 1 
) 
+0

您是否尝试过使用'WHERE accounts.id IN'而不是'='? – Jens

+0

呼叫表上是否有主键? - 如果是的话它是一个自动增量字段 –

+0

是的,有一个主字段,但它的类型是base64,所以我没有使用它来获得最大值。 @IenKenney .. –

回答

1

请尝试此查询,让我知道了结果:

SELECT accounts.id, accounts.name, calls.name subject 
FROM accounts 
INNER JOIN calls ON accounts.id = calls.parent_id 
WHERE calls.date = (
    SELECT max(c.date) 
    FROM calls c 
    WHERE c.parent_id = calls.parent_id) 
+0

是的,它的工作,但它只给我36条记录,但根据我的其他自定义查询,提供了约4000记录。一些call.date对于同一个帐户应该是相同的。你可以请修改它,让它给我正确的结果。@ mahmoud –

+0

@GauravSharna不幸的是我不了解你。请给我们样本数据和预期产出 – Mahmoud

1

尝试此查询:它应该工作。

SELECT * FROM Accounts A 
INNER JOIN 
(
    SELECT 
     c.parent_id 
     ,c.name 
     ,c.date_modified 
    FROM calls C 
    INNER JOIN 
    (
     SELECT 
      parent_id 
      ,MAX(date_modified) call_date 
     FROM calls 
     GROUP BY parent_id 
    ) CC ON CC.parent_id = c.parent_id AND CC.call_date = c.date_modified 

) CCC ON CCC.parent_id = A.id 
相关问题