Tenho uma gridview que vai ser preenchida pelos dados retornados pela função search, até aqui tudo bem, o problema começa quando preciso fazer um Group By pelo idNumTicket, mas esse Group by deveria vir ordenado pela DtSubmetido DESC de forma a apanhar o ultimo registo introduzido, mas isso não acontece ele retorna sempre pelo primeiro, ou seja faz o order ASC.
Gostaria se saber se existe forma de ordenar o group no CdbCriteria.
O que quero é basicamente isto que tenho em SQL mas no formato do CdbCriteria.
SELECT * FROM (select * from TroubleTicket order by DtSubmetido DESC) as ToubleTicket_tmp group by idNumTicket order by DtSubmetido DESC
Obrigado, mas penso que não faz nada do que eu pedi.
O meu problema é o group retornar os dados ordenados de forma asc e eu quero arranjar uma forma de ordenar esse grupo de forma desc para o registo a aparecer na gridview ser o ultimo que foi introduzido com o idNumTicket x, e não o primeiro.
Eu tenho um Ticket com um determinado idNumTicket.
Esse ticket pode ter várias entradas sobre o mesmo, ou seja terei várias linhas com detalhes diferentes, mas com o mesmo idNumTicket.
O que quero é agrupar todos os tickets com o mesmo idNumTicket.
Até aqui tudo bem.
O problema é que o group do cdbcriteria retorna uma linha por idNumTicket, mas os detalhes que vem nessa linha são relativos à primeira entrada com um determinado idNumTicket, e eu queria que ele retornasse a ultima entrada.
Ou seja que fizesse uma ordenação decrescente dentro do grupo de forma a mostrar a ultima alteração ao ticket.
Por exemplo tenho o ticket idNumTicket = 213 que tem várias entradas:
id idNumTicket Estado Data_Alteração
1 231 Aberto 2011-11-20
2 231 Em Curso 2011-11-21
3 231 Concluido 2011-11-22
4 231 Fechado 2011-11-23
O que queria era que o group retornasse isto:
id idNumTicket Estado Data_Alteração
4 231 Fechado 2011-11-23
Mas retorna é isto:
id idNumTicket Estado Data_Alteração
1 231 Aberto 2011-11-20
Deste modo sabia o estado actual do ticket directamente na tabela do gridview.
A query sql que coloquei em cima faz isto, mas precisava de a traduzir para o formato CdbCriteria
$criteria->alias= 'i';
$criteria->select= '*';
$criteria->compare('id', $this->id);
$criteria->condition='i.id IN (select id FROM (select * from TroubleTicket WHERE idEstado IN (2,3,4,5,6,<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' /> order by id DESC) as ToubleTicket_tmp group by idNumTicket ORDER BY id DESC)';
$criteria->order='idEstado ASC, DtSubmetido DESC';