2016-07-28 73 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 
相關問題