Cuando estamos trabajando, siempre se nos piden muchas consultas, para obtener todos los datos posibles, para poder obtener el máximo de información. Y una de las consultas que se me ha repetido muchas veces es, encontrar el total de pedidos obteniendo la última fecha del pedido y en otros sitios la petición de datos era diferente, pero con el mismo fin, datos agrupados con la fecha más reciente.
Datos de ejemplo
En este ejemplo, vamos a tener dos simples tablas, la tabla clientes, con los datos de los clientes:
id_cliente | nombre | apellidos | |
---|---|---|---|
1 | Alberto | Martínez | oyagum@gmail.com |
2 | Juan | Lopez | jlopez@gmail.com |
3 | Maria | Sanchez | msanchez@gmail.com |
4 | Pedro | Almodovar | palmodovar@gmail.com |
5 | Alberto | Martínez | oyagum@gmail.com |
Y la tabla pedidos con los datos de los pedidos
id | fecha_creacion | fecha_update | precio_total | id_persona |
---|---|---|---|---|
1 | 2017-02-06 21:28:01 | 2017-02-05 21:28:10 | 50 | 1 |
2 | 2017-02-05 21:38:48 | 2017-02-05 21:38:48 | 46 | 4 |
3 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 115 | 1 |
4 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 80 | 3 |
5 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 135 | 3 |
6 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 50 | 5 |
7 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 146 | 2 |
8 | 2017-02-05 21:38:50 | 2017-02-05 21:38:50 | 79 | 1 |
9 | 2017-02-05 21:38:51 | 2017-02-05 21:38:51 | 56 | 4 |
10 | 2017-02-05 21:38:51 | 2017-02-05 21:38:51 | 114 | 3 |
11 | 2017-02-05 21:38:51 | 2017-02-05 21:38:51 | 91 | 5 |
12 | 2017-02-05 21:38:51 | 2017-02-05 21:38:51 | 128 | 3 |
13 | 2017-02-05 21:38:51 | 2017-02-05 21:38:51 | 148 | 3 |
14 | 2017-02-05 21:38:52 | 2017-02-05 21:38:52 | 84 | 4 |
15 | 2017-02-05 21:38:53 | 2017-02-05 21:38:53 | 129 | 2 |
16 | 2017-02-05 21:38:53 | 2017-02-05 21:38:53 | 126 | 1 |
17 | 2017-02-05 21:38:53 | 2017-02-05 21:38:53 | 90 | 4 |
18 | 2017-02-05 21:38:53 | 2017-02-05 21:38:53 | 109 | 4 |
19 | 2017-02-05 21:38:54 | 2017-02-05 21:38:54 | 127 | 4 |
20 | 2017-02-05 21:38:54 | 2017-02-05 21:38:54 | 78 | 3 |
21 | 2017-02-05 21:38:54 | 2017-02-05 21:38:54 | 100 | 1 |
22 | 2017-02-05 21:38:54 | 2017-02-05 21:38:54 | 62 | 3 |
23 | 2017-02-05 21:38:54 | 2017-02-05 21:38:54 | 43 | 3 |
24 | 2017-02-05 21:38:55 | 2017-02-05 21:38:55 | 126 | 1 |
25 | 2017-02-05 21:38:55 | 2017-02-05 21:38:55 | 103 | 2 |
Tengo más datos en la tabla de pedidos, pero es para que os hagáis una idea.
La consulta SQL
Y ahora pasaremos a obtener la consulta para conseguir el total de pedidos de los clientes y la fecha de la última vez que compraron
Así que aquí os pongo como sería la consulta SQL:
1 2 3 4 5 6 | SELECT a.total_comprado, a.ultima_fecha_compra, b.nombre, b.apellidos, b.email FROM ( SELECT count(p.precio_total) as total_comprado, MAX(fecha_creacion) as ultima_fecha_compra, p.id_persona FROM pedidos p GROUP By p.id_persona ) a INNER JOIN clientes b ON a.id_persona = b.id_persona GROUP By a.id_persona |
Resultado
Y este sería el resultado de la consulta.
total_comprado | ultima_fecha_compra | nombre | apellidos | |
---|---|---|---|---|
15 | 2017-02-06 21:28:01 | Alberto | Martínez | oyagum@gmail.com |
16 | 2017-02-05 21:39:10 | Juan | Lopez | jlopez@gmail.com |
19 | 2017-02-05 21:39:04 | Maria | Sanchez | msanchez@gmail.com |
20 | 2017-02-05 21:39:09 | Pedro | Almodovar | palmodovar@gmail.com |
15 | 2017-02-05 21:39:09 | Alberto | Martínez | oyagum@gmail.com |