Quiero usar ORDER BY en un ID único con prioridad. Mi tabla se ve así:
+-------------+------------------+ | disposition | uniqueid | +-------------+------------------+ | ANSWERED | 1595409523.22546 | | NO ANSWER | 1595409523.22546 | | BUSY | 1595409523.22546 | | BUSY | 1595406475.22391 | | NO ANSWER | 1595406475.22391 | | BUSY | 1595406475.22391 | +-------------+------------------+Quiero, por ejemplo, en el ID: 1595409523.22546 que aparezca la línea donde hay 'RESPUESTA', si no hay 'RESPUESTA', quiero que se muestre 'SIN RESPUESTA'; de lo contrario, OCUPADO, etc. El resultado debería ser:
+-------------+------------------+--+ | disposition | uniqueid | | +-------------+------------------+--+ | ANSWERED | 1595409523.22546 | | | NO ANSWER | 1595406475.22391 | | | | | | +-------------+------------------+--+Usted me podría ayudar ? Gracias !
Para verificar, para cada identificación única, una lista clasificada de disposiciones y devolver la clasificación más baja encontrada, o la disposición léxicamente menor si no se encuentra ninguna de la lista clasificada:
select if(min(find_in_set(disposition, 'ANSWERED,NO ANSWER,BUSY')),elt(min(find_in_set(disposition, 'ANSWERED,NO ANSWER,BUSY')),'ANSWERED,NO ANSWER,BUSY'),min(disposition)) disposition, uniqueid from yourtable group by uniqueidSi su versión de MySql es 8.0+ y admite funciones de ventana, puede usar ROW_NUMBER() :
select t.disposition, t.uniqueid from ( select *, row_number() over (partition by uniqueid order by field(disposition, 'ANSWERED', 'NO ANSWER', 'BUSY')) rn from tablename ) t where t.rn = 1Para versiones anteriores, puede usar la agregación condicional:
select case 1 when max(disposition = 'ANSWERED') then 'ANSWERED' when max(disposition = 'NO ANSWER') then 'NO ANSWER' when max(disposition = 'BUSY') then 'BUSY' end disposition, uniqueid from tablename group by uniqueid Ver la demostración .
Resultados:
> disposition | uniqueid > :---------- | ---------------: > ANSWERED | 1595409523.22546 > NO ANSWER | 1595406475.22391