Usar MAX(date) em datetime e GROUP BY não devolve a maior data
Preciso retirar de um tabela, os últimos registros ordenando pela data, e agrupar em seguida, mantendo a ordem, mas não da pra por um GROUP BY depois de ORDER BY, tentei de tudo quanto é jeito.
A tabela:
CREATE TABLE `internal_users_groups_change_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cod` varchar(50) NOT NULL,
`relacionated_group` varchar(50) NOT NULL,
`relacionated_collaborator` varchar(50) NOT NULL,
`date` datetime NOT NULL,
`type` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=latin1;
Com os dados:
id | cod | relacionated_group | relacionated_collaborator | date | type
1 | abc | group_1 | user_1 | 2017-06-21 10:23:16 | 1
2 | acd | group_1 | user _2 | 2017-06-21 10:23:16 | 1
3 | aef | group_1 | user_3 | 2017-06-21 13:11:42 | 1
4 | rgt | group_1 | user_2 | 2017-06-21 13:47:30 | 2
Onde o que eu quero, é buscar os dados pelo grupo, e listar os colaboradoradores, mas apenas o ultimo dado de cada colaborador deve ser exibido.
Tentando com MAX(date) e INNER JOIN:
SELECT a.*
FROM internal_users_groups_change_history a
INNER JOIN (
SELECT *, MAX(date) AS date_updated
FROM internal_users_groups_change_history GROUP BY relacionated_collaborator
) AS max USING (id, relacionated_collaborator);
Assim, ela me responde
id | cod | relacionated_group | relacionated_collaborator | date | type
1 | abc | group_1 | user_1 | 2017-06-21 10:23:16 | 1
2 | acd | group_1 | user _2 | 2017-06-21 10:23:16 | 1
3 | aef | group_1 | user_3 | 2017-06-21 13:11:42 | 1
Tentei colocando uma tabela dentro da outra:
SELECT * FROM (
SELECT id,cod,relacionated_group,relacionated_collaborator,date,type
FROM internal_users_groups_change_history
WHERE relacionated_group = "199269352594a7344a21008.97800859"
ORDER BY id DESC
) tmp_tbl GROUP BY tmp_tbl.relacionated_collaborator
Assim ela também me responde a mesma coisa:
id | cod | relacionated_group | relacionated_collaborator | date | type
1 | abc | group_1 | user_1 | 2017-06-21 10:23:16 | 1
2 | acd | group_1 | user _2 | 2017-06-21 10:23:16 | 1
3 | aef | group_1 | user_3 | 2017-06-21 13:11:42 | 1
Ai eu desisti, e fiz no php, funcionou, mas quando eu parei pra pensar, se essa tabela ficar grande, isso vai ser um problema.
A resposta ideal seria:
id | cod | relacionated_group | relacionated_collaborator | date | type
1 | abc | group_1 | user_1 | 2017-06-21 10:23:16 | 1
3 | aef | group_1 | user_3 | 2017-06-21 13:11:42 | 1
4 | rgt | group_1 | user_2 | 2017-06-21 13:47:30 | 2
Alguém sabe indicar algum método de dar o group by depois do order by ?
Discussão (3)
Carregando comentários...