2016-07-28 2 views
0

У меня есть две таблицы accounts и calls. В таблице Account содержатся данные учетной записи и таблица call содержат данные вызова, такие как date_modified и другие с идентификатором учетной записи в столбце 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, поэтому я не использую его для получения максимального значения. @IanKenney .. –

ответ

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 
Смежные вопросы