Hola David.
Gracias por tu extensa respuesta.
Lo primero que he hecho es probar el tema de las diferencias entre MySql y SQL. En
www.w3schools.com explican con ejemplos ambas, y en efecto, no funcionan igual:
En MySql esto funciona:
SELECT COUNT(CustomerID), Country, City
FROM Customers
GROUP BY Country;
En SQL No:
Error in SQL:
You tried to execute a query that does not include the specified expression 'City' as part of an aggregate function.
por lo que veo, en SQL hay que incluir todos los campos del SELECT en el GROUP BY, menos los que se aplican a funciones ( Count(), Max(), Min(), Sum(), Avg() )
Volviendo a la consulta que me pasaste:
SELECT ARTICULO,NOMBRE,CODPRO,MAX(FECHA),PRECIO
FROM facplin.dbf
WHERE ARTICULO = "1"
GROUP BY CODPRO,ARTICULO,NOMBRE,PRECIO
Me funciona bien, pero realmente necesito que me devuelva solo 1 línea con la última compra de cada proveedor, en este caso me devuelve todas las compras realizadas al proveedor, no me lo agrupa por proveedor. Creo que mi problema es que estoy muy acostumbrado a MySql, llevo varios años trabajando con MySql por el tema de webs y ahí si que me devuelve un registro por cada proveedor con la compra de la fecha más reciente.
partiendo de la misma información:
CREATE TABLE IF NOT EXISTS `facplin` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ARTICULO` char(10) NOT NULL,
`NOMBRE` char(10) NOT NULL,
`CODPRO` int(10) NOT NULL DEFAULT 0,
`FECHA` date NOT NULL,
`PRECIO` float NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;
INSERT INTO `facplin` (`id`, `ARTICULO`, `NOMBRE`, `CODPRO`, `FECHA`, `PRECIO`) VALUES
(1, '1', 'UNO', 1, '2024-02-20', 10),
(2, '1', 'UNO', 1, '2024-02-20', 11),
(3, '1', 'UNO', 2, '2024-02-20', 12),
(4, '1', 'UNO', 1, '2024-02-21', 13),
(5, '2', 'DOS', 1, '2024-02-22', 13),
(6, '2', 'DOS', 2, '2024-02-21', 13),
(7, '1', 'UNO', 1, '2024-02-22', 13),
(8, '2', 'DOS', 1, '2024-02-21', 13),
(9, '1', 'UNO', 2, '2024-02-22', 13);
necesito obtener la siguiente información:
ARTICULO,NOMBRE,CODPRO,FECHA, PRECIO
1, UNO, 1,2024-02-22, 10
1, UNO, 2,2024-02-22, 12
Con la misma consulta en MySql la obtengo pero en SQL me aparecen más registros, no me los agrupa por el código de proveedor.
Supongo que es por mi poco conocimiento de SQL, iré haciendo averiguaciones y creo que es hora de una formación en SQL para poder avanzar.
P.D.: Actualmente trabajo mis DBF's sin ADO. No es viable cambiarlo todo a SQL ya que tengo mucho escrito y hay demasiada herencia tecnológica para un cambio de esta magnitud, pero me gustaría ir implementando ADO en todo lo nuevo que escribo y el código "legacy" que voy modificando.
Salud!