Pero quedan Juan y Pedro le quedan antes de Ruben. Y Juan es de un mes después y Pedro no es urgente.
Además, hay que tener en cuenta como almacena el valor urgente (falso es menor a verdadero en muchos sistemas, 0 y 1).
Primer crearía una tabla de clientes fecha por prioridad.
DROP TABLE Prioridades
CREATE TABLE Prioridades (prioridad int autoincrement, Cliente, Fecha, Urgente)
INSERT INTO Prioridades (Cliente, Fecha, Urgente);
SELECT DISTINCT Cliente, Fecha, Urgente FROM TablaDatos ORDER BY Fecha, Urgente, Cliente
elimino las entradas no urgentes de los clientes que tengan alguna urgente
DELETE FROM Prioridades WHERE Urgente="No" AND Cliente IN (SELECT Cliente FROM Prioridades WHERE Urgente="Si")
La tabla prioridades queda ordenada por su autoincremental (orden de fecha y urgente primero.
Luego hago un JOIN de las tablas TablaDatos y prioridades
SELECT P.Prioridad, T.Cliente, T.Fecha, T.Urgente;
FROM Prioridades AS P LEFT JOIN TablaDatos AS T ON (P.Cliente=T.Cliente);
ORDER BY 1, 3, 4
Eso debería funcionar (no tengo datos ni tiempo para más).
Saludos: Miguel, La Pampa (RA)