2013-12-18 2 views
2

Я пытаюсь выбрать самый последний RowID из таблицы действий для каждого пользователя в учетной записи. Но каждый раз, когда я запускаю запрос, он возвращает правильный RowID, но другая информация, по-видимому, выбирается случайным образом, так как Subject и Date всегда имеют ранний RowID.MySQL Возврат неверных значений с помощью Group Bu

Почему MySQL выбрать правильные последние RowId но затем возвращаются случайные значения для в SubjectDate и т.д ..

`

SELECT 
MAX(activities.rowid) as RowID, 
contacts.firstname as First, 
contacts.lastname as Last, 
activities.visiondescription as Subject, 
smsreceived as Date 
FROM activities, contacts 
WHERE activities.contactid=contacts.contactid 
AND activities.accountid=contacts.accountid 
AND activities.accountid = 'AAXA-S0BJ7I' 
group by activities.RowID; 

Кто-нибудь видел, что я могу делать неправильно? Я попытался использовать группу по видам деятельности. Контакты, действия.SMSReceived и до сих пор не радость.

Благодаря

+2

Потому что это просто, как GROUP BY работает – Strawberry

+0

И я хотел бы добавить, MySQL имеет четкую документацию по этому нестандартному расширению SQL (http://dev.mysql.com/doc /refman/5.7/en/group-by-extensions.html). –

+0

Несомненно, должен быть способ получить правильное значение, связанное с Max (rowid), иначе в противном случае база данных будет бесполезной ... – user2054962

ответ

1

попробовать что-то вроде этого:

SELECT contacts.contact_id,  
    contacts.firstname as First, 
    contacts.lastname as Last, 
    GROUP_CONCAT(DISTINCT IF(activities.rowid = MAX(activities.rowid),visiondescription,NULL)) AS Subject 
    GROUP_CONCAT(DISTINCT IF(activities.rowid = MAX(activities.rowid),smsreceived,NULL)) AS `Date` 
FROM activities, contacts 
WHERE activities.contactid=contacts.contactid 
AND activities.accountid=contacts.accountid 
AND activities.accountid = 'AAXA-S0BJ7I' 
GROUP BY contacts.contact_id; 

Идея заключается в том, что необходимая информация относится к пользователю, и поэтому GROUP BY должно быть против пользователя. GROUP_CONCAT выделяет только эту строку среди сгруппированных строк, которые соответствуют условию IF.

- просто мысль

 Смежные вопросы

  • Нет связанных вопросов^_^