List:Spanish« Previous MessageNext Message »
From:Jesús Gómez Date:May 24 2010 10:59am
Subject:Re: Ayuda en query
View as plain text  
Hola.

No se si sería así pero prueba a agrupar solo por el ID;

SELECT client_management.Client_id, client_management.account_manager,
client_management.sales_manager, Max(client_management.Date) AS [MaxOfDate]
FROM client_management
GROUP BY client_management.Client_id

----- Original Message ----- 
From: "Marta Pérez Romero" <martape@stripped>
To: <mysql-es@stripped>
Sent: Monday, May 24, 2010 12:46 PM
Subject: Ayuda en query


Hola a todos,

Estoy intentando hacer una query y no consigo el resultado que necesito.

Imagino que será sencillo, pero no doy con ello :(

A ver si se os ocurre alguna idea.

Tengo una tabla donde se almacenan los datos de clientes.
En concreto los campos son:
Client_id; account_manager; sales_manager; date

Se van guardando los datos de cada día, de modo que por ejemplo tengo un
listado como este:
Client_id; account_manager; sales_manager; date
1; fernandez; rodriguez; 2010-05-19
1; gomez; dominguez; 2010-05-17
2; gomez; dominguez; 2010-05-18
2; gomez; dominguez; 2010-05-17

A mí lo que me interesa es que la query me devuelva el listado de registros
por cliente, pero solo el último día que ese cliente tiene un registro.

Por ejemplo, en las tres filas que he pegado antes, hay dos líneas para el
cliente 1, una para el día 19 y otra para el día 17. De un día a otro
el
account_manager y el sales_manager han cambiado.
Lo que yo quiero ver es quién es el account_manager y el sales_manager más
reciente.
En el cliente 2 hay también dos registros de dos días distintos, pero el
account_manager y el sales_manager no han cambiado.
Por lo tanto como resultado de la query me tendría que dar:

Client_id; account_manager; sales_manager; date
1; fernandez; rodriguez; 2010-05-19
2; gomez; dominguez; 2010-05-18

Es decir, la query toma la tabla original y dice: select cada client_id y
dame el account_manager y el sales_manager del último día en que haya un
registro para ese cliente.

Hasta ahora la query sería algo así:

SELECT client_management.Client_id, client_management.account_manager,
client_management.sales_manager, Max(client_management.Date) AS [MaxOfDate]
FROM client_management
GROUP BY client_management.Client_id, client_management.account_manager,
client_management.sales_manager
ORDER BY client_management.Client_id, Max(crm_am_test.Date) DESC;

El problema es que esto me da como resultado:

Client_id; account_manager; sales_manager; date
1; fernandez; rodriguez; 2010-05-19
1; gomez; dominguez; 2010-05-17
2; gomez; dominguez; 2010-05-18

Es decir, al agrupar los resultados por client_id, de forma correcta me
devuelve el cliente 2 solo una vez con los valores para el último día donde
hay datos (18 Mayo) y porque en la tabla original el cliente 2 tiene los
mismos valores de account_manager y sales_manager en ambos días en que
aparece.
Sin embargo, el cliente 1 aparece dos veces, ya que los valores de
account_manager y sales_manager han cambiado de un día a otro.

Y sin embargo, yo no quiero que me salga el cliente 1 dos veces, sino solo
una línea por cada cliente que hay en la tabla original, con los valores de
account_manager y sales_manager en el último día en que hubo registros para
ese cliente.

He intentado explicarme lo mejor posible, espero que se haya entendido.

¿Alguien tiene alguna sugerencia?

Mil gracias,
Martape



--------------------------------------------------------------------------------



Se certificó que el correo entrante no contiene virus.
Comprobada por AVG - www.avg.es
Versión: 9.0.819 / Base de datos de virus: 271.1.1/2892 - Fecha de la 
versión: 05/23/10 20:26:00

Thread
Ayuda en queryMarta Pérez Romero24 May
  • Re: Ayuda en queryJesús Gómez24 May
  • Re: Ayuda en queryewen fortune24 May
    • Re: Ayuda en queryMarta Pérez Romero24 May
      • Ayuda con charset collation o no se quemarcelo yornet26 May
  • Re: Ayuda con charset collation o no se queJuan Vallini26 May