2013-06-28 6 views
0

Так что я пытаюсь выбрать некоторые контакты (TABLE2) на основе их ИСТОРИИ (ТАБЛИЦА 1). Так я тестирую с этим SQL Query:MySQL GROUP By и ORDER BY конфликт

SELECT 
    contacts_history.userId, 
    contacts_history.contactId, 
    contacts_history.dateAdded, 
    contacts.firstName 
FROM 
    contacts_history 
INNER JOIN contacts ON contacts_history.contactId = contacts.contactId 
AND contacts_history.userId = contacts.userId 
GROUP BY 
    contacts.contactId 
ORDER BY 
    contacts_history.dateAdded DESC 
LIMIT 0, 10 

Но я заметил, что я не получаю больше всего «последние» значения. Если я удалю GROUP BY, я получу совершенно разные ДАТЫ ДАННЫХ.

Я пробовал использовать DISTINCT, но не получил приличного ответа.

Посмотрите на результаты сравнительной таблицы.

enter image description here enter image description here

У меня трудное время получить самые последние элементы, без дубликатов ContactId там внутри.

Любая помощь будет принята с благодарностью ... я уверен, что это супер базовый, просто не уверен, почему он не работает лучше всего.

ответ

1

GROUP BY предназначено для использования вместе со способами заполнителя. Без чего-то вроде MAX(contacts_history.dateAdded) это не имеет никакого смысла использовать GROUP BY

Я думаю что вы хотите по линии:

SELECT 
    contacts_history.userId, 
    contacts_history.contactId, 
    MAX(contacts_history.dateAdded) AS last_date, 
    contacts.firstName 
FROM 
    contacts_history 
INNER JOIN contacts ON contacts_history.contactId = contacts.contactId 
AND contacts_history.userId = contacts.userId 
GROUP BY 
    contacts_history.userId, 
    contacts.contactId 
    contacts.firstName 
ORDER BY 
    last_date DESC 
LIMIT 0, 10 

Это должно дать вам (я не проверял) один строка для каждого пользователя и контакта, отсортированная по дате добавления контакта.

+0

Спасибо, человек ... некоторое время выполнял некоторые sql, забыл про простые вещи. – Justin